呼呼,终于想到了~
先
(i++) 就是先提取i的值来使用最后才自加
(++i) 先把i+1然后这个时候i=2
那么i=2+2虽然前面是先提取出来了i 但实际并没有自加过,之所以为2是因为(++i)而i始终都只是一个内存空间里的值
最后i=4,这个时候运算完了,然后执行最初的(i++) 里的自加,i就等于5
k = (j++) + (++j);
是因为k=4之后,k没有自加,自加的是j所以k=4;j=3;
这个道理就跟
i=(i++)一样,先赋值了,之后,才去自加,所以这里的i=2
k=(j++)则是把j值赋值之后,才自加~
不知道这样说能听懂了不?
总之就是i++这种,是赋值之后才自加的。这是C跟C++里编译上的问题吧
我同时用了TC VC++6.0 VS2005都是这样,用了C#和JAVA没这现象。
编译器不同,结果不同。实际程序中最好不要这样写,避免歧义