b2=(++a2)+(++a2)+(++a2);
问的很好,以前我也曾经疑问过,这其实是C语言过于自由造成的问题。。我们在书写中一定要主要类似的问题。。。
++a2的运算 编译后 处理方式为 先自增
然后再参与运算。
(++a2) + (++a2)
编译后同理,a2自增两次后运算。那么a2 的值为12, 结果为24 不是23,这是计算机处理的方式。。想要理解透彻的话,最好看看编译过程 gdb一下 或者看看反汇编代码。
那么(++a2) + (++a2) + (++a2), 结果呢?大家或许会猜,36我也犯过错。其实不然,+运算是从左到右运算。而且每次只能处理两个操作数。汇编中的add指令
那么运算的时候变成了 先执行 (++a2) + (++a2),结果出来后 再于后面的++a2 进行运算。 也就是24+13 =37。
再次重申 尽量避免这样的 多个自增数相加的写法,会产生意想不到的错误。!!~
希望都楼主有所帮助!!