📄 subject_52852.htm
字号:
<p>
序号:52852 发表者:菜鸟人飞 发表日期:2003-09-15 11:32:37
<br>主题:请问++i和++i的问题!
<br>内容:高手帮忙!<BR><BR> i=3;<BR> X=(++i)+(++i)+(++i);<BR> Y=(i++)+(i++)+(i++);<BR> 则X=? Y=?<BR><BR> VC的表达式的结合方式为从左到右的方式,在VC中编译运行后的X为16,麻烦请高手解释一下16是如何来的,谢谢!Y是多少不知。<BR> <BR> 另外:i=3时,单独的++i和i++分别的答案是多少?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-15 11:51:19
<br>内容:顶啊!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:飞翔的瞳眸 回复日期:2003-09-15 12:11:07
<br>内容: i = 3:++i == 4; i == 4<BR> i = 3:i++ == 3; i == 4
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-15 12:17:32
<br>内容:又来??<BR>真是晕菜,建议看看《C++编程思想》或者《C++程序设计语言》
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-15 12:24:49
<br>内容:水番,不会吧,讲讲啊,谢了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:飞翔的瞳眸 回复日期:2003-09-15 12:27:14
<br>内容:我在.net,debug mode下X == 18<BR>晕啦~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-15 12:33:00
<br>内容:《C++程序设计语言》(特别版,中文版)P110<BR>6.2.2 求值顺序<BR>说的很清楚,象你那样的表达式,语言并没有定义结果,也就是说结果是什么是不可知的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-15 12:36:52
<br>内容:建议斑竹将这个帖子置顶,好像不少人都要写出这样的语句。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-09-15 12:42:55
<br>内容:猜测:+为二元运算符,对于X=(++i)+(++i)+(++i)<BR>先计算第一个“+”,i++计算两次此时i=5,X=10+(++i);<BR>再计算第二个“+”,i++计算一次此时i=6,X=10+6=16;<BR>同理,可得X=(++i)+(++i)+(++i))+(++i)=23;<BR>VC运行结果好像也是这样的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-09-15 12:47:57
<br>内容:至于Y=(i++)+(i++)+(i++);++右结合。Y=9;整个表达式计算结束后,i连续加三次为6<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-15 13:24:25
<br>内容:rosyrays,再问一下,你上面的计算第一个+的时候,为啥i++是计算两次而后面一个+则计算一次呢,还有就是“至于Y=(i++)+(i++)+(i++);++右结合。Y=9;整个表达式计算结束后,i连续加三次为6<BR>”这句话看不懂,烦请指点一二,谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:飞翔的瞳眸 回复日期:2003-09-15 13:40:45
<br>内容:同意六楼的.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:船 回复日期:2003-09-16 08:58:13
<br>内容:因为“+”是二元运算符,X=(++i)+(++i)+(++i)即X=((++i)+(++i)){a}+(++i){b}<BR>{a}表达式算完之后才会去计算{a}+{b};要计算{a}表达式,i就加了两次,VC编译器应该是这样处理的<BR>正如六楼所说的,还有的编译器可能是把整个表达式扫描完才对X求值,结果就是18。<BR>++右结合时整个表达式计算完之后,才进行“++”运算。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-16 12:13:25
<br>内容:To 12楼,等一下有人说答案是12,是不是你也要找出一番道理来。<BR>:-)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-16 12:27:30
<br>内容:谢谢各位!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-09-16 12:38:47
<br>内容:TO 13楼,当然我不会去那样用的,但是根据结果,猜想一下编译器的处理也未尝不可。<BR>如果真有人说还有的编译器编译完,运行结果是12,并且能够讲出道理,我也很愿意洗耳恭听 .
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:badboy 回复日期:2003-09-16 12:46:24
<br>内容:结果是未定义的,会有好几种可选答案。甚至离奇的结果也可能。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水镜 回复日期:2003-09-16 17:17:06
<br>内容:i++的话就是开始原值不变,执行后在自动加1!<BR>++i的话就是原值开始之前就加一,之后在执行!<BR>int i=3;<BR>i++什么的话就是用3去实行后面的程序,之后i变成4<BR>++i的话在用4去执行后面的句子。<BR>在c语言里是这样的,我想在别的里也应该是这样的吧?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-17 10:30:57
<br>内容:分析得好!谢了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:yirushenhai 回复日期:2003-09-17 18:38:08
<br>内容:很佩服rosyrays啊<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水镜 回复日期:2003-09-19 14:43:34
<br>内容:i=3;<BR>x=4+4+4;<BR>x=12?不对吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-19 14:57:27
<br>内容:TO 20楼<BR>不要分析了,没有人知道对不对,我在上面说的很清楚了<BR><BR>《C++程序设计语言》(特别版,中文版)P110<BR>6.2.2 求值顺序<BR>说的很清楚,象你那样的表达式,语言并没有定义结果,也就是说结果是什么是不可知的。 <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水镜 回复日期:2003-09-20 09:30:15
<br>内容:我听你的了!<BR>你说什么就是什么啦!嘿嘿<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:adam&amp;ancy 回复日期:2003-09-21 02:23:35
<br>内容:i++,i++,i++;<BR><BR>以最后那个i为基准,如果你i是3的话,那就第三个i就是6,所以答案就是三个六相加。<BR><BR>十二楼的答案是不是有点问题?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:81 回复日期:2003-09-21 13:15:06
<br>内容:y=(i++)+(i++)+(++i);<BR>y=?;<BR>12楼的,分析一下!<BR><BR><BR>我猜::先执行完整条语句,i++留着等语句y执行完后执行,就是(i++)<BR>比(++i)晚执行,所以y=10;<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小白菜 回复日期:2003-09-21 14:48:58
<br>内容:我在borlandc 下的结果是x=15,y=12<BR><BR>#include <iostream.h><BR>void main()<BR>{<BR> int i=3;<BR> int x=(++i)+(++i)+(++i);<BR> cout<<x<<endl;<BR> i=3;<BR> int y=(i++)+(i++)+(i++);<BR> cout<<y<<endl;<BR><BR>}<BR><BR>i=3;<BR>x=(++i)+(++i)+(++i);<BR>运算顺序是<BR>(++i) //i=4,即 i==4;<BR>到第2个时<BR>(++i) //因为i==4 所以 第2个i==5;<BR>第三个就是==6<BR>结果就是 4+5+6=15<BR><BR>y就是 3+4+5=12<BR><BR>没有在vc下试过<BR>相信也是一样的结果<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:81 回复日期:2003-09-22 21:47:49
<br>内容:楼上的,<BR>vc里面x=16;<BR>y=12;<BR>前几楼的前辈分析过了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:gaoqin 回复日期:2003-09-23 12:44:51
<br>内容:为什么我们要研究这种无聊的问题呢?<BR>这有意思吗?<BR>我要是看见睡没事写这样的程序<BR>我非砍死他不可<BR>伙计们<BR>多做一点有意义的事情好不好?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-23 12:49:55
<br>内容:To 27楼<BR>就是有人这么无聊,否则腾讯就破产了。:-)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:船 回复日期:2003-09-23 12:52:05
<br>内容:楼上的老兄举的例子y=(i++)[a]+(i++)[b]+(++i)[c]很有意思;<BR>在下再胡猜一番:<BR>假设i=3;开始执行y语句,<BR>首先执行第一个二元操作符+,此时可能有个中间变量假设是tempI纪录i在整个表达式计算完毕需要增加的量(表达式中每有一处i++,tempI都要加1)<BR>当第一个二元操作符+运算完后,会保存到另一中间变量tempFirst=6 此时i=3,tempI=2<BR><BR>然后执行第二个二元操作符+,操作数为 tempFirst 和 (++i)<BR>在执行此二元操作符+之前,i要自加等于4,在进行tempFirst + i=6+4=10的操作,<BR><BR>此时,整个表达式运算结束y=10,i=i+tempI=6;<BR><BR>同理可推出:<BR>m=(++i)+((++i)+(++i))+(i++)=24;<BR>n=(++i)+ (++i)+(++i) +(i++)=22;<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-09-23 12:56:52
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -