一.“=” 不等于 “==”:
1.比较符号“==”写为赋值符号“=”导致错误。为了避免编译器的警告,不应该简单地将其关闭,而是应该显示地进行比较
ex:
- if(x=y)
- {
- foo();
- }
- //应该写成:
- if((x=y) != 0)
- {
- foo();
- }
注:判断一个函数的返回值是否等于一个常量的值或者常数的时候,可以写成类似于下面的形式:
if(0 == function())
{
foo();
}
2.把赋值符号写成比较符号导致错误。
- if((filedesc == open(argv[i],0)) < 0)
- error();
分析:== 运算的结果只能是0或者1,有缘不能小于0,error()永远没有机会执行。
二:&和|不同于&&和||:
&和|是按位与和或,&&和||是逻辑运算符(与和或)
三:程序中的“贪心法”:
ex:
y = x/*p; /*p指针指向除数*/
分析:但是编译器会自动把/*当做注释开始处理,不能达到目的。应该写成
y = x / (*p);
四:整型常量
如果整型常量的第一个字符是数字0,那么该常量被视作八进制数。
五:字符与字符串
单引号包起来的字符事实上是一个整数,整数值对应于该字符在编译器采用的字符集的序列值。如'a'与0141(八进制)97(十进制)完全一致。
双引号引起来的字符串代表一个指向无名数组的起始字符的指针。该数组被双引号之间的字符以及一个'\0'初始化。
阅读(692) | 评论(0) | 转发(0) |