1. 连续赋值
C语言中可以进行连续赋值,如a=b=c=1,“=”运算符是从右至左结合,意味着先将1赋给c,再将c赋给b,再将b赋给a,此时 a,b,c都是1,即完成了连续赋值。
但是定义时连续赋值违反了C语言中先定义后使用原则,即定义时连续赋值编译器会报错。
error: int a=b=c=1;
ok: int a,b,c; a=b=c=1;
2. 连续判断
#include <stdio.h>
void JudgeEqual()
{
//int a = b = c = 1; //error
int a,b,c;
// 1)a = b = c = 1; //### OK!
// 2)a = b = 0; c = 1; //### OK!
if(a == b == c == 1)
printf("### OK!\n");
else
printf("### NO!\n");
}
int main()
{
JudgeEqual();
return(0);
}
分析:if(a == b == c == 1) 和 if(a==1 && b==1 && c==1)区别
(a == b == c == 1)是一个关系表达式,由于运算符"=="具有左结合性,故其运算顺序是:
(((a == b) == c) == 1)
1)若a=1,b=1,c=1: (a == b)为真=1; ((a == b) == c)即(1 == 1)为真=1; (((a == b) == c) == 1)即(1 == 1)为真=1,if成立为真;
2)若a=0,b=0,c=1: (a == b)为真=1; ((a == b) == c)即(1 == 1)为真=1; (((a == b) == c) == 1)即(1 == 1)为真=1,if成立为真;
2)中a和b值为0,最终判断也为真,成立。
(a==1 && b==1 && c==1)各自判断值确保条件成立。