C语言易错点总结

                      C语言易错点总结

1.sizeof是关键字而非函数。
2.定义变量时,不能同时对多个变量连续赋初始值。
eg:int m=n=1;//错误
3.scanf语句:
“%c"将读入空白符,” %c"能忽略空白符。
"%s"遇到空白符读入结束。
ps:要想将有空格的字符串存入char型数组中,可使用gets(str) 或fgets(str,size,stdin)从标准输入设备中读入。但不建议使 用危险的gets(str),因为它无法限制输入字符串的长度,容易导致缓冲区溢出。两者的读入有所区别,fgets()读入换行符会将换行符作为字符串的一部分。
scanf语句中没有精度修饰符。
scanf语句输入数值时,读入结束的几种情况:
1)遇到空白符
2)达到域宽
3)遇到非法输入
scanf语句的返回值为读入的项数。未能成功读入返回0,调用函数失败或读到文件结束返回EOF(值为-1的宏)。
4.小心&&与||的短路特性。
eg:

         int a=1;
         int b=2;
         if(a<0&&b++>2)//b++不会被执行
         a+=2;

5.空指针不能解引用。
6.函数的返回值可以是除了数组之外的任何类型。
7.数组名是一个地址,不能改变。
eg:

                 int a[3]={1,2,3};
                 int *p=a;
                 printf("%d",*(a+1));//合法
                 printf("%d",*(++a));//不合法
                 printf("%d",*p);//合法
                 printf("%d",*(++p));//合法

8.共用体不能进行比较操作,也不能作为函数参数。
9.局部变量可以屏蔽全局变量(就近原则)。
10.同一个外部变量名在两个不同的文件中被声明为不同的类型,会导致C程序失效。
11.使用宏定义完成类似函数的功能时,要注意括号的使用。
eg:#define cube(a) a*a*a//不好
当函数中调用cube(a+b)时,计算的将是(a+(b*a)+(b*a)+b)
值。
改进:#define cube ((a)*(a)*(a))

猜你喜欢

转载自blog.csdn.net/qq_45359344/article/details/103254106