这道题主要考查的是区分,前自增运算符与后自增运算符的区别。
主要区别:(int a = 3)
1.++a返回的值为4,而a++返回的值为3,但是a的值都变成了4
2.++a返回的是一个变量,可以作为左值(可以被赋值);而a++
返回的是一个临时变量,会被自动释放掉(在此语句结束后),
所以只能作为右值。
因此c项错了。(a++)= (a++) + a;
A正确的原因:
a += (a++);
可以拆分为a = a + (a++);把变量看作是一个“容器”,a++返回的是一个临时变量
就把它看作是个不可改变的容器。(只是方便理解,具体形式我也很模糊)。
第一步:执行带括号(a++)操作;得到的是3,a这个容器内部的值变成了4
第二步:执行a + 4,因为a的内部值变为了4,所以结果为7
第三步:执行a = 7;a的内部值变为了7;
再分析一下D的结果
(++a)+= (a++);
在这里就不可以简单的拆分为(++a)= (++a)+ (a++);
因为++的优先级高于+、=运算符,所以第二种情况前++执行了两次,而第一次
的前++只执行一次;它等价a = (++a) + (a++);
第一步:执行(++a),a的内部值变为4
第二步:执行(a++),返回值为4,但是a的内部值变为5
第三步(关键):一个a容器(5)与一个不可改变的容器(4)相加,得到值为9
(ps:9也是一个不可改变的容器)
第四步:执行a = 9
D的结果分析的可能有些乱,楼主自己好好理一理吧。
其实这道题虽然没有什么实际意义,但是考察的很细,理清楚对自己还是有好处
的,楼主加油