当前位置: 代码迷 >> C语言 >> [求助]关于printf的问题
  详细解决方案

[求助]关于printf的问题

热度:322   发布时间:2007-10-23 10:34:45.0
[求助]关于printf的问题
一个程序:如
#include<stdio.h>
main()
{
int n;
n=1;
printf("%d%d%d",n,n++,++n);


}
输出结果为322
执行顺序是从右至左
请求解释?请求从printf函数的运行原理的角度给出解释.
谢谢
搜索更多相关的解决方案: printf  

----------------解决方案--------------------------------------------------------
输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右, 也可从右到左。 在TC中是 自右向左边!
参考《C语言教程》(资料收集:beck Copyright 2002 www.vcok.com, All Rights Reserved )

----------------解决方案--------------------------------------------------------

仅仅是编译器的关系啊


----------------解决方案--------------------------------------------------------
明白了
----------------解决方案--------------------------------------------------------
一般情况是从右往左.
----------------解决方案--------------------------------------------------------
怎么我编译后结果是222啊
----------------解决方案--------------------------------------------------------
以下是引用piggy在2007-10-23 18:13:03的发言:
怎么我编译后结果是222啊

老兄,你的编译器到了保修期了没?!
----------------解决方案--------------------------------------------------------
我感觉这的题目都是数字游戏,没多大实际意义的。机器能做的事,人一般都能做。你先自己想想会有什么结果,在看编译出来的结果。实在不行,就往结果上套
----------------解决方案--------------------------------------------------------

应该是自右向左的,


----------------解决方案--------------------------------------------------------

对于c 的调用约定,就是从右往左将参数压入堆栈,

只不过不同的编译器 对n++这个参数进行自增运算的位置不同,

例如: 说打印 222 的是因为编译器是将所有的参数压入堆栈后才 执行了 后++运算.
而打印 322 的是因为编译器 自右往左 将第2个参数压入堆栈后,在将第3个参数压入前执行了后++运算,这影响了 第3个参数...使它变成了3.


----------------解决方案--------------------------------------------------------
  相关解决方案