正文

[推荐]二级C语言常见易错题2006-07-31 01:29:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/petibo/17031.html

分享到:

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变量的值实现了交换

阅读(3631) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册