(++a)+(++a)?

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:36:44
int a=3;
(++a)+(++a)为什麽等于10呢?而(++a)+(++a)+(++a)又等于16呢?
用vc运行的结果
(++a)+(++a)*(++a)=42?这个的确研究起来没多大用,但是就是怕笔试的时候碰到这种问题就不好办了,不过还是谢谢了

不同的编译器有不同的解释`

vc应该是先算前两个;

(++a)+(++a) 先++a,自增,再后面的自增,此时a=5,所以(++a)+(++a)=10

(++a)+(++a)+(++a) 先自增,再第二个自增,编译器先算前两个的和,即10
第三个自增,a为6;所以结果为16
同理假设 b=1; (++a)+b+(++a)=10 而(++a)+(++a)+b=11

结论,vc中,当两个自增中还有其它变量,先算前两个;要是两个自增中没有变量(1,2,3......)``自己试试,哈哈

晕,怎么又多了`(++a)+(++a)*1*(++a)=42
`(++a)+(++a)*b*(++a)=36
其中b=1,自己想想吧```不过这个东西研究没多大用处``,不同编译器的有不同的结果

++a使用a进行自增后的结果,(++a)+(++a)两次自增1后a的值为5,所以5+5=10
而(++a)+(++a)+(++a)是三次自增后a=6,所以结果应该是18,不知道你有没有写错.
这是要说明的是++a是先运算后引用,而a++是先引用后运算,在使用的时候要注意.

补充:我在TC2的调试后面的一个是18;
但VC为什么是16就不太清楚了,初步分析是先算了前两个++a后面的就一个接一个地算++a,如
(++a)+(++a)+(++a)为5+5+6=16
(++a)+(++a)+(++a)+(++a)=5+5+6+7=23
(++a)+(++a)+(++a)+(++a)+(++a)=5+5+6+7+8=31
出现这样的问题主要是编译器的不同所导致,所以为了有更好的可移植性一般不推荐用这种写法.

z