问题描述:
main()
{
int i,j;
i=1;
j=(++i)+(++i)+(++i);
printf("%d",j);
}
我在vc++6.0中运行
结果怎么是10呢,如果按我们老师讲的自加运算,我算应该是12啊,我问老师他也没说上来,咋回事啊?
问题解答:
恩 这其实是编译器的问题,所以真正编程时要尽量避免这种写法
经我亲自测试这个运算
在 VC++2008 中 结果是 12
在 VC#2008 中 结果是 9
其实 这种程序也就在一些变态的练习题中出现真正写程序时没人写这种运算式的
++i是最先最先运递增算再返还值
i++是先返还值,最后最后再运算递增
这里应该是3个递增都运算完毕了,也就是4+4+4=12
估计VC6的编译器有点落后
而且不同语言似乎也有所不同,我用VC2008做是12,如果用C#做答案是2+3+4=9
不同编译器对++运算处理方法不同,所以这个程序在不同编译器中运行结果也不同。最起码,vc和gcc中的结果是不一样的。
谭浩强的书中说到这个问题。
我也计算过了,确实得j=10 i=4
我也不太清楚怎么回事
不过如果根据我回答应该是9
2+3+4.。。有顺序结构的,并不是4+4+4
等待答案吧
看这里我的回答(带了图的那个):
http://zhidao.baidu.com/question/121702311.html