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
一个表达式里有多次++,这属于未定义行为,标准并未强制规定,不同的编译器会得出不同的结果。
不要迷信书、考题、老师、回帖;
要迷信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.
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
不要写这种表达式,也不要纠结于这种表达式
假如真想了解,仔细读下面这文章:
关于C,C++表达式求值顺序 http://bbs.csdn.net/topics/370153775
2
关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767,http://bbs.csdn.net/topics/370153775