今天网上看到一个华为的面试题目:
写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值
int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
答案是C是错误的,而A B D是正确的。
我感到很疑惑,于是敲代码验证下,在C++中,确实答案是C不正确。但是在C中,C与D都是错误的。这就非常奇怪了,为什么会这有这样的区别,原因在什么地方呢?
想要知道答案,只能求助于经典书籍了。
C部分
在《C和指针》5.1 操作符中,有这么一段描述:
int a, b, c, d;
...
a = b = 10; a和b得到值10
c = ++a; a增加到11,c得到的值为11
d = b++; b增加到11,d得到的值为10
抽象地说,前