今天看到有人提了这么个问题;
i=3,s=0
s=(++i)+(++i)+(++i )
为什么结果是s=16,i=6呢
初一看,我想结果不应该是15(4+5+6)吗,是他搞错了吧,保险起见,我决定用编译器运行一下,看一下结果,先是用VC是了一下,结果确实没错,
会不会是编译器问题,不行,我再试试其他编译器,换了codeblocks试了一下:
那么DevC++呢,我再试了一下:
结果还是这样,好吧,我放弃了,结果就应该是16,那么这又是为什么呢?
我定下心来,仔细想了想,想了片刻,觉得应该是这样:
刚准备把自己的想法讲给别人听的时候,有遇到了一个新的问题,提出这个问题的同学说,用VS2013运行了一下,结果是18 !!!当时我就震惊了,难道刚刚的理解有问题???抱着怀疑的态度,我用VS2013运行了一下,结果如下:
确实是这样的,看到这个结果,我又一头雾水了。。。
就在我一筹莫展之时,我突然想起,我们不是正在学微机原理和汇编吗(虽然现在也没讲多少东西),一个念头涌上我的心头,要不看看他们编译之后生成的汇编代码,看看能不能看出点名堂(汇编只接触过一点点)。怀着试一试的心态,我看了一下汇编的代码:
这一看,好像还真看出了点眉目来了,通过汇编代码,我们可以发现,VC和VS的编译方式是不相同的:
一个有趣的C语言问题:s = (++i) + (++i) + (++i)
原文地址:http://blog.csdn.net/u010084308/article/details/39481625