10.9 运算符==、=和!=的区别
先来看看这3个运算符各自的使用场合,==和!=是关系运算符,其优先级要高于赋值运算符=。由于三者都包含等号,因此在使用的时候要格外小心。下面来看在使用这三个运算符的过程中如果不小心写错会带来怎样的后果。下面的代码实现的是比较两个量之间的大小关系,如:
a=2;
b=3;
if(a==b)
printf("a与b大小相等。");
但是在程序时不小心少写了一个“=”,上面的代码就变为:
if(a=b)
printf("a与b大小相等。");
分析上面的变化,就因为少写了一个“=”,结果却截然不同。在使用关系运算符==时,由于a和b并不相等,因此不会打印出信息“a与b大小相等。”,接下来由于少写了一个“=”,关系运算符变为了赋值运算符,即变为了“a=b”,这是一个赋值表达式,最终的表达式的值就是b对a的赋值。此时表达式的值为真,因此这时会输出错误的信息。
还有一点不得不说的是优先级,由于对优先级的不清楚而导致错误也是很常见的。这里以a=b!=c和(a=b)!=c之间的区别为例进行分析,假设a=1,b=2,c=2。先分析a=b!=c表达式,由于“!=”的优先级要高于“=”,因此先比较b与c的关系,因为b等于c,所以表达式的值为假,即a的值为0。接下来分析(a=b)!=c表达式,由于加了括号,因此此时a的值为2,而最终表达式(a=b)!=c的值为0。