关于printf函数、自加运算

在学习指针的时候,碰到了printf语句,并且里面常常有何自加,自减运算连用。经过尝试,得到一些结论,不知正确与否。

 

1.不论在TC,VC6.0还是VS2008中,printf语句是自右向左执行的。

2.具体的编译器会有不同的理解方式,应尽量避免这样的写法。

 

 

下面是从网上找的一个例子(来源:http://hi.baidu.com/tonydelwee/blog/item/2e683a1aa31320e9af5133c6.html)

 

在VC++6.0中的规则如下:
1、i遇到了就直接使用 ;
2、++i先加1,再使用加过1的i;
3、i++先使用i,再加1,但是要在整条语句结束以后才自加1。
printf("%d,%d,%d,%d,/n",i++,++i,i,i++);
从右往左运算:
i++得到2(i=2,后加1在整条语句执行完才进行)
++i得到3(i=3,先加1,后使用)
i++得到3(i=3,后加1在整条语句执行完才进行)
所以输出结果为:3,3,2,2
然后计算刚才的两次后自增运算后,i=5
printf("%d/n",i);
所以,结果是5

 

在VS2008中的规则我不太清楚,我的猜测是这样的: 

1.++i只执行加法但不显示,等到所有的都计算完了再使用

例:printf("%d,%d,%d,%d,/n",i++,++i+1,i,i++);

结果为:4,6,5,2(显然++i+1里的i是最后用的)

 

2.i等所有的计算完成了,再使用

例:printf("%d,%d,%d,%d,/n",i++,++i,i+1,i++);

结果是:4,5,6,2(i+1的结果为6,也验证了i是等所有自加运算结束以后才使用的。)

 

3.i++先使用,紧接着再执行加法,不必等到整条语句都执行完了

例如:对于printf("%d,%d,%d,%d,/n",i++,++i,i,i++);

结果是:4,5,5,2

 

 

其他:

对于本程序,VS2008里的第二个printf语句就显得多余了,因为第一句就已经体现了i最终的值,而在VC6.0里第二个printf语句则是十分必要的。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值