当前位置: 代码迷 >> C语言 >> printf("%d %d %d %d",i++,i++,++i,++i);求解
  详细解决方案

printf("%d %d %d %d",i++,i++,++i,++i);求解

热度:657   发布时间:2006-12-25 22:29:46.0
printf("%d %d %d %d",i++,i++,++i,++i);求解
int main()
{
int i=0;
printf("%d %d %d %d",i++,i++,++i,++i);
getch();
return 0;
}

输出结果3 2 2 1
谁能给解释下呢
搜索更多相关的解决方案: printf  求解  

----------------解决方案--------------------------------------------------------
我测试了一下。。。
事实证明TC是从右往左算的(从红色往左算过去的)。。。也就对了。。。
测试程序如下

int main()
{
int i=0;
printf("%d %d %d %d",i++,i++,++i,++i,printf("d"));
getch();
return 0;
}

你看看我的这个printf("d")是打印在最后一个数字之后,还是第一字数字之前,程序运行结果显示在第一个数字之前,也就是说TC先算了++i,也就是从右往左算的

[此贴子已经被作者于2006-12-25 22:45:35编辑过]


----------------解决方案--------------------------------------------------------
测试程序运行结果如下
d3 2 2 1
说明printf("d")最先执行的
----------------解决方案--------------------------------------------------------
然后呢?
3 2 2 1是怎么会事?
----------------解决方案--------------------------------------------------------
这个不就正常了吗。。。说起来也一大串。。。也就是++i和i++的区别了。。。书上有。。看看吧
----------------解决方案--------------------------------------------------------
这是关于运算级别的问题了
for an instance;
i=0;
a=i++;
++的级别优先于=,而++是从右向左运算,所以先自加,再赋值,i++后,i变为1,而整个式子赋值到a的时候a还是0

而a=++i时,
a=1;
这个就是i++;++i的区别了
----------------解决方案--------------------------------------------------------

其实我们用输出的那个命令本身就是个函数;其为从实到形,从右到左传送.
for example: printf("%d%f",x+y,f(3));过程中是f(3),x+y,%d%f,分别传递给了printf(xp,int x,float y)中的float y;int x; xp.


----------------解决方案--------------------------------------------------------
楼上的.在吗?帮个忙!~
----------------解决方案--------------------------------------------------------
以下是引用superkuuga在2006-12-26 0:50:19的发言:

其实我们用输出的那个命令本身就是个函数;其为从实到形,从右到左传送.
for example: printf("%d%f",x+y,f(3));过程中是f(3),x+y,%d%f,分别传递给了printf(xp,int x,float y)中的float y;int x; xp.

怎么冒出来个xp呢?


----------------解决方案--------------------------------------------------------
书上都有的~~

从右往左运算
----------------解决方案--------------------------------------------------------
  相关解决方案