Code Bye

关于C语言中自增问题

int a = 1;
printf("%d\n", ++a + ++a + ++a);

输出结果为12.
但是按本人的理解,应该是  2 + 3 + 4 = 9
书上说的是最后一次自增 a变成了 4,可是前边的都已经计算过了啊,无法理解,求高手指点

解决方案

16

书上这是扯淡。
一个表达式里有多次++,这属于未定义行为,标准并未强制规定,不同的编译器会得出不同的结果。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
参考:http://blog.csdn.net/qq423399099/article/details/51774359

3

 ++a + ++a + ++a = 9本身没有错,但是这个值并没有保存在a中,a一直都只是在进行自增而已。顺便说一下,那个9其实是保持在一个临时变量中。

5

答案是12。
int a = 1;
printf(“%d\n”, ++a + ++a + ++a);
在這裏是這樣的,首先 a是一個變量,不是多個。
第一次算第一個++a,此時a = 2;所以後面的兩個a的值也是2
第二次算第二個++a時,此時a = 2, ++a 的值是3,這裏要注意的是,此時的三個a是同一個變量,所以三個a的值都有是3,
假如算值的話,此時已經是9.
第三次算第三個值,此時a = 3,再執行++a時,些時a = 4,三個a是同一個變量,所以其實三個a = 4,
答案自然是 4 + 4 + 4 = 12.

2

这是不确定行为,取决于表达式求值顺序
不要写这种表达式,也不要纠结于这种表达式
假如真想了解,仔细读下面这文章:
关于C,C++表达式求值顺序  http://bbs.csdn.net/topics/370153775

2


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C语言中自增问题