C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别

main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}

第1个回答  2011-01-24
C语言和其他语言不同,在其他语言中,一般不区分 赋值操作符 与 等于 运算符,但是C语言很区分。
= 是赋值
== 是等于运算
也就是说,
a=b=c, 是一个表达式,运行到这里时,将a的值赋给b、c,运行完后abc的值相等;
a=b==c,是一个复合表达式,先将a的值赋给b,然后与c比较,如果相等则返回0,否则返回一个非零值;
a==(b=c),是一个复合表达式,先执行括号中的内容(即将b的值赋给c),然后比较a、c,如果相等则返回0,否则返回一个非零值;
a==(b==c),是一个复合表达式,先比较b、c的值,如果相等则返回0,否则返回一个非零值,然后比较a与(b==c)的返回值(注意这里不是再比较a与b或c,以前就错在这里过,希望LZ注意)。

可以看到C是区分 = 跟 == 的,虽然对新手很麻烦、容易错,但是一旦熟练之后会觉得很灵活,能把赋值语句放到任何你喜欢的地方。

PS:LZ的程序风格不好,而且还不习惯引用stdio.h,希望改正。附我改写的程序:
#include<stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
printf("%d,%d,%d,%d\n", a = b = c, a = b==c, a==(b = c), a==(b==c));

return 0;
}
运行结果:3,0,0,0

参考资料:Rockbox开发团队 PurlingNayuki 欢迎询问!http://pmp-firmware.tk/

本回答被网友采纳
第2个回答  2011-01-24
a=b=c,是赋值语句,从右到左,a=3,b=3
a=b==c 是逻辑语句,相当于(a=b)==c,先将b值赋值给a,然后和c比较是否相等,这句返回为0
a==(b=c),同上句.
a==(b==c),先计算括号内的b==c返回为0,然后在a==0,返回0。
=和==是2中不同的表达
第3个回答  2019-12-18

3 3 0 0  codeblocks上编的,

第4个回答  2011-01-24
C语言中一个等于号表示,将右边的值赋给左边,两个等于号在一起才表示真正的等于,是关系运算符。运算顺序都是从右到左。
上面的个程序运行的结果为
3 , 0 , 0 ,0
相似回答