一个C语言的++运算符的问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:34:19
int a = 4;
C) (++a) += a;
D) (++a) += (a++);
我以为C,D都不对.怎么是正确的呢?

怎么能对++a赋值呢.

这和运算符的等级有关,“()”的运算级别最高,先算“()”里面的,其次是自增运算符“++”,最后是赋值运算符“+=”
C)选项的结果是a=10;
D)选项的结果是a=11; 左边++a后 a=5,右边a++后 a++=5,但a=6了,所以运算式子变成a=6+5=11了

我发现99%的人都不知道这个是不合规则的, 尤其某些出题的人喜欢拿这个瞎搞

不过至少编译器确实是可以接受 ++a作为左值的, 但是 a++则不行

...其实都是可以的..
C的话,++a所以a=5,a+=a就是a=a+a,最后结果是10.
D的话结果是11.
至少VC++可以编译运行出来.
1楼...LZ题目里a++没拿来做左值好么。。。

这样的表达式运算顺序和编译器有关,所以答案并不唯一的