C中printf计算参数的顺序

Cprintf计算参数的顺序是从右到左。

对底层处理不清楚,具体先参考以下文章。

[1] http://wenku.baidu.com/view/edf0300a6c85ec3a87c2c5cc.html

[2] http://wenku.baidu.com/view/60e13b37a32d7375a41780c7.html

[3] http://www.cnblogs.com/jiayouniu/articles/2375448.html

 

以下为实验结果:

我也够无聊的,实验了这么多数据!可惜看不懂汇编代码,还是搞不懂内部如何执行的!

 

代码1

17行执行后,ptr指向6.

18行等价于

*(ptr) += 123;

ptr++;

18行执行后ptr指向7.

19行,从右到左运算,首先++ptr,此时ptr指向8,然后输出

VS2008的输出结果:8, 8

VC6.0的输出结果:8, 8

 

代码2


VS2008的输出结果:9, 9, 9

VC6.0的输出结果:9, 8, 8

 

代码3

VS2008的输出结果:6, 6, 6, 8

VC6.0的输出结果:7, 7, 8, 8

 

代码4_1

VS2008的输出结果:13, 12, 11, 10,9, 8

                   14

VC6.0的输出结果:8, 8, 8, 8, 8, 8

                  14

 

代码4_2

VS2008的输出结果:13, 12, 11, 10,9, 8, 14

VC6.0的输出结果:8, 8, 8, 8, 8,8, 8

 

代码5_1

VS2008的输出结果:14, 14, 14, 14,14, 14

                   14

VC6.0的输出结果:14, 13, 12,11, 10, 9

                  14

 

代码5_2

VS2008的输出结果:14, 14, 14, 14,14, 14, 14

VC6.0的输出结果:14, 13, 12,11, 10, 9, 8

 

代码6

VS2008的输出结果:8, 9

VC6.0的输出结果:8, 8

 

代码7

VS2008的输出结果:9, 8

VC6.0的输出结果:8, 8

 

代码8

VS2008的输出结果:10, 10, 10

VC6.0的输出结果:10, 10, 9

 

具体只是编译器内部的压栈顺序不同。

先根据以上数据作如下总结:真无聊

  printf函数中,无论i是指针变量还是普通变量

  1.对于++i--i而言(如代码5

   VS2008:自右至左,依次执行++--操作,输出值为所有操作都执行完成后的值,

            可理解为自右至左,依次执行,执行完成后,统一输出结果。

   VC6.0:自右至左,依次执行++--操作,输出值依次为每次操作执行完成后的值,

           可理解为自右至左,依次执行,执行一个输出一个。

  2.对于i++i--而言(如代码4

   VS2008:自右至左,依次执行++--操作,输出值依次为每次操作执行完成后的值,

            可理解为自右至左,依次输出后执行,输出一个执行一个。

   VC6.0:自右至左,依次执行++--操作,输出值为所有操作都执行完成后的值,

           可理解为先统一输出结果,再自右至左,依次执行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值