C++ 中自加运算符的问题!!!求高手解!!!

发布时间:2024-05-17 02:38 发布:上海旅游网

问题描述:

题目就是类似
i=5
y=(i++)+(++i)+(i++) //18
y=(++i)+(++i)+(i++) //21
y=(++i)+(++i)+(++i) //22
y=(i++)+(i++)+(i++) //15
调试运行后Y的结果分别如后面所列..
求高手解释一下得出结果的过程,百思不得其解!!!
那几行y的运算结果分别是单独运算的
大家的建议都很好,我只是想了解一下,程序在系统中的运行过程!

问题解答:

这个问题我仔细研究过。通过汇编代码我知道了具体过程,不过挺麻烦的,不太好说。出现奇怪结果的原因是编译器没有考虑这种情况,将应该分开存储的几个结果都保存在一个空间里(因为就一个变量i)。如果真想知道具体过程,说一声!

i++是先吧数算进去 如果有循环的话会在加,比如y=i++;i=1;
那结果就是y=1;有循环的话下次就是y=2;
++i是先加在继续,比如y=++i;i=1;
那结果就是y=2;有循环的话下次就是y=3;
你写错了吧 。不是//是||吧!我怎么看了半天不知道那个是什么符号?||是或 就是数那个结果可能是前面的可能是后面的都对
y=(i++)+(++i)+(i++)||18 y=18,y=16;
y=(++i)+(++i)+(i++)||21 y=21,y=17;
y=(++i)+(++i)+(++i)||22 y=22,y=18;
y=(i++)+(i++)+(i++)||15 y=15;
结果应该是这样的吧!好久没看过c了,早就开始用java了。不对的话你可以买本c++书看看。上面都有的。

haha逗啊//是注释啊
我猜LZ是用VC++6.0做的,因为我试也是这样:)
这个问题很好解决
我的书上关于自增自减运算有一段说明:
和题目类似的表达式(i++)+(i++)+(i++)
有的系统按照自左而右的顺序求解括号内的运算,求完第一个括号内的值后,实现i的自加,i变为6,再求第二个括号的,结果应该是5+6+7=18;
而另外的一些系统,把5作为所有i的值,所以得到15,求完总值之后再自加3次,i变为8....

换一种不会因为这个产生歧义的写法吧!

这种破题目不要去做。

vc6.0和vs2003的运行结果都不一样,还有debug,release的结果也有可能不同。实际当中没有人去这样写的!

实际中根本不可能写出那样的代码,你花时间去研究这些没有意义

我算得应该是对应:
19
20
21
18
不知道怎么与运行结果不一致,晕

热点新闻