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

问题描述:

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个回答 分类:综合 2014-10-18

问题解答:

我来补答
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
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
 
 
展开全文阅读
剩余:2000