1. 数据溢出int a = 32767;a = a + 1; 此时a的值为 –327682. (-1)&&(-1) 值为:1非0的数,逻辑值均为1只有数0,逻辑值为03. 设a=5, b=6, c=7, d=8, m=2, n=2执行 (m = a > b) && ( n = c > b)结果:n 的值为 2解析:&&是短路(shortway)运算符,当&&左边表达式的值为0时,不再执行右边的表达式4. 1 / 2 = 0 1.0 / 2 = 0.55. 转义字符遇到’\’字符应注意转义字符问题,比如’\\’,’\ddd’就是转义字符常见考法:Q:”a\045+045\b”有几个字节? A:8个字节(分别是’a’,’\045’,’+’,’0’,’4’,’5’,’\b’,’\0’)字符串结束符如上题,”a\045+045\b”含有最后的字符串结束符’\0’,因而长度为8个字节注意:计算字符串长度时,sizeof会将’\0’计算在内,strlen()则不算Main(){char b[] = “hello, you”;b[5] = 0;printf(“%s\n”, b);} 运行结果:hello解析:b[5]=0 ;等价于 b[5] = ‘\0’;6. ++ i , i ++x = 5;y1 = x++ * x++;y2 = ++x * ++x; 此时y1的值为25,y2的值为497. printfl 考法1x = 11, y = 10;printf(“%d, %d”, (x++, y), y++); 输出结果:11,10解析:1) printf函数按参数从右到左顺序进行分析y++ -> x++ -> y | | 10,后y变11 112) 分析结束,输出顺序是从左到右;即:11, 10l 考法2printf(“%4s”, “abc”); // 输出结果 (空格)abcprintf(“%-4s”, “abc”); // 输出结果 abc(空格)printf(“%4s”, “abcde”); // 输出结果 abcdeprintf(“%9.3f”, 12.3456); // 输出结果 1.234e+018. scanfscanf(“%7.2f”, &a); // 错,不能规定精度scanf(“%3d”, &a); // 正确scanf(“%d:%d”, &a, &b); // 输入格式:(整数)整数) 例 12:34scanf(“%3c”, &ch); // 正确。但是ch只取输入字符中的第一个字符 // 例:输入abc,则ch值为’a’9. 注意switch中的break10. while (a = 1) { … } // 注意这里是赋值号11. for( x = 0, y = 3, i = 0; (y > 3)&&(x < 4); x++, y++ ) i++;运行结果 i = 0解析:for循环运行过程 表达式1->表达式2-> 循环体->表达式312. 数组int a[10] = {0, 1, 2, 3} // 正确。前四个元素赋值,后6个元素全为0int a[2][2] = {1,2,3,4} // 正确 int a[ ][2] = {1,2,3,4} // 正确。第一维可以省略int a[2][ ] = {1,2,3,4} // 错误。非第一维不能省略13. 预处理定义宏:#define s(x) x*x表达式 s(a+b) 宏展开为: a + b*a + b 定义宏:#define s(x) (x)*(x)表达式 s(a+b) 宏展开为: (a + b)*(a + b)14. 指针l 若定义: int a[10], *p; p = a;则: a + i 是地址*(a+i) 是地址a + i的内容l 数组是指针*(a+i) 和 *(p+i) 是等价的a[i] 和 p[i]是等价的l 字符串也是指针若定义: char *sp = “bug”; char s[] = {‘b’,’u’,’g’};则: s与sp是等价的15. 函数l 值传递:Void swap1(int a, int b){int c = a;a = b;b = c;}void main(){int x = 1, y = 2;swap1(x, y);printf(“%d, %d”, x, y);} 程序运行输出结果:1,2 可见x与y变量的值没有交换l 地址传递:Void swap2(int *a, int *b){int *c = a;*a = *b;*b = *c;}void main(){int x = 1, y = 2;swap1(&x, &y);printf(“%d, %d”, x, y);} 程序运行输出结果:2,1 可见x与y变量的值实现了交换

评论