理想的结果应该是 15 ,而不是 18。
但实际结果为什么是16呢?
看以下几种情况:
1: (++i)=4 i=4
2: (++i)+(++i)=10 i=5
3: (++i)+(++i)+(++i)=16 i=6
4: (++i)+(++i)+(++i)+(++i)=23 i=7
可见,第二种情况比我们想的多了1,其他都正常。
看另外的情况:
1: (i++)=3 i=4
2: (i++)+(i++)=6 i=5
3: (i++)+(i++)+(i++)=9 i=6
4: (i++)+(i++)+(i++)+(i++)=12 i=7
是不是完全不对?这是cl.exe version 12.0.0.8168编译器下的结果。
这是编译器在处理连续的++操作符时的错误导致的。编程不是绕口令,如果想学编程,就别看有“试题”、“考题”、“练习题”等关键字的书,如果为了计算机考试或过级,书上说什么就是什么,别管实际上是怎么样。
CSDN上高手的看法:
i=i+1 i++ ++I的区别? 请高手解释一下.
计算机内部实现过程有别,详细如下:
i=i+1的过程相当:
temp=i+1; i=temp;
i++的过程相当:
temp=i; i=temp+1; return temp;
++i的过程最简单:
i增1然后return i 的值,一步完成,没有给任何temp变量赋值:)
(无法用式子确切表达,请神灵原谅我的笨拙:)