问题描述:
我们令为1先,( ++i + i )为4能理解的,但( i++ + i )为2就不能理解了,
问题解答:
这种写法本来就是不符合ANSI C的,其结果不确定,而是随编译器而异。
不要试图去理解它,即使理解过来了,换个编译器说不定结果又不一样。
Steve Summit的《C FAQ》有个类似的例子,原文如下:
“为什么这样的代码: a[i] = i++; 不能工作?”
答:“子表达式i++ 有一个副作用—– 它会改变i 的值—– 由于i 在同一表达式的
其它地方被引用, 这会导致无定义的结果, 无从判断该引用(左边的a[i] 中)是旧值
还是新值”
一样的理解思路啊,我就想不通你前面能理解后面为什么不 能理解呢。
++i,是先+1在进行其它运算,
i++是先进行其它运算再+1