C/C++ Blog

++i与i++

++i 与i++这是很多初学者遇到的问题,请不要把这个问题看得太简单了,也不要想得太复杂。请看我下面的几个语句,如果你能答对,算是过关了吧。当然抛开你那世上少有运气。不说了现在开始.........

void main(void)
{
int i=0;
int s=0;
s=(++i)+(i++)+(++i);
printf("%d,%d",i,s);
s=(i++)+(++i)+(++i);
printf("%d,%d",i,s);
}
请问这段小程序在TC2.0 和VC6.0下编译会分别得到什么样的结果.
 如果你的回答是
TC2.0: 3,6  6,15
VC6.0: 3,4    6,13 那么我恭喜你答对了。为什么结果是这样呢?
因为TC是多元运算的。首先扫描语句两个++i经过两次相加,结果是2所以S最后结果是2*3=6

printf下一个语句I 已经为3了,现在又开始扫描这语句发现两个++I所以I为5所以最后结果为3*5=15
我们看看在VC下执行的情况,程序开开扫描s=(++i)+(i++)+(++i);扫描完成后它是这样做的,先计算(++i)+(i++)此时I=1相加结果为2,再执行2+(++i)此时的I为1执行++I后成为2所以s结果为2+2=4

执行过完第一个printf语句后I为2扫描语句,先执行 (i++)+(++i)此时I=4了,相加结果为8再执行 8+(++i)=8+5=13

所以在TC中是多元运算符,在VC中是二元运算符,不过在写程序时并不提倡这样的写法。

posted on 2009-11-29 14:27 laery 阅读(169) 评论(1)  编辑 收藏 引用

Feedback

# re: ++i与i++ 2009-11-30 09:05 彭小虎(Tigerkin)

TC过时了哦。。。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理