/*
1. a 和 &a 有什么区别请写出以下代码的打印结果
#include<stdio.h>
void main( void )
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return;
}
2. sizeof和strlen的区别
3. 写一个“标准”宏MIN
4. 编码实现直接插入排序
5. 野指针是如何产生的,如何避免
*/
/*
1.a是数组的首元素的地址,&a是整个数组的地址
*(a+1) 是 2, *(ptr-1)是 5
*/
/*
2. sizeof是一个运算符,算的是给定对象的字节大小
strlen是一个函数,算的是字符串的长度,参数必须是字符串的首地址
*/
/*
3. #define MIN(x,y) x < y ? x : y
*/
/*
4.
*/
#include <stdio.h>
void sort(int *arr, int n);
int main(void)
{
int arr[10] = {2 , 6 ,99, 65, 87, 3, 21,55, 21,1};
sort(arr, 10);
for(int i=0; i<10; i++) {
printf("%d ",arr[i]);
}
return 0;
}
void sort(int *arr, int n)
{
int i, j;
int t;
for(i=1; i < n; i++) {
t = arr[i];
for (j = i-1; j >= 0; j--) {
if (t > arr[j]) {
arr[j+1] = arr[j];
} else {
break;
}
}
arr[j+1] = t;
}
}
/*
6.野指针的产生:
1. 指针变量没有初始化;
2. 指针释放后没有赋值为NULL;
如何避免: 1. 在定义指针的时候 赋值为NULL;
2. 使用完指针后及时的使用free ,释放内存
*//*
6. #include 的顺序以及尖叫括号和双引号的区别
7. 为什么要使用字节对齐?字节对齐的原则
8. 内联函数有什么优点?内联函数和宏定义的区别
9. 定义一个函数,把一个字符串倒序,如“abcd”倒序后变为“dcba”
10. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
*/
/*
6.
尖角括号里的.h文件名存放在默认文件夹下;
双引号里的.h文件名存放在指定文件夹下
*/
/*
7. 为了方便cpu访问,牺牲空间,提升效率
原则: 成员依次对齐,整体是最大成员的整数倍
*/
/*
8. 可以加快程序的运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。而宏只是简单的字符替换。
区别:宏定义是在预处理阶段替换相应的代码,而内联函数是函数,不会替换
*/
/*
9.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *daoxu(char *p);
int main(void)
{
char *p = NULL;
size_t n =0;
getline(&p, &n, stdin);
printf("%s\n",daoxu(p));
return 0;
}
char *daoxu(char *p)
{
int i;
int lenth = strlen(p)-1;
char *arr = NULL;
arr = malloc(lenth*sizeof(char));
for(i=0; i<lenth; i++) {
arr[i] = p[lenth - i-1];
}
return arr;
}*/
/*10.
*/
#include <stdio.h>
int tel(int num);
int main(void)
{
int num;
scanf("%d",&num);
printf("%d\n",tel(num));
return 0;
}
int tel(int num)
{
int a,b,c,d;
a = (num / 1000 + 5) % 10;
b = (num / 100 % 10 + 5) % 10;
c = (num / 10 % 10 + 5) % 10;
d = (num % 10 + 5) % 10;
return d * 1000 + c * 100 + b * 10 + a ;
}