/* 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 ; }
原文:https://www.cnblogs.com/chenbin123/p/10406597.html