2 u012089725 u012089725 于 2014.03.18 15:32 提问

解释下,谢谢,这个程序的运行结果

#include"stack.h"
#include

int _tmain()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
请问结果是?为什么?

2个回答

slamzwl
slamzwl   2014.06.18 15:33
已采纳

今天又回想这个问题,发现不是之前说的那个原因,顺序还是从里向外进行输出,第一次是输出i的原值,而第二次则是输出第一结果的长度,因为第一次是43,长度为2,所以输出结果为2,第三次捕获到第一次结果为2,长度为1,所以输出1,如果你在第一个%d后面加空格,则第二次输出的就是3,而不是2了。

slamzwl
slamzwl   2014.03.18 21:21

结果是4321,为什么是这个结果,这是我的一个猜想,因为最外围的printf中的参数是printf中时,它会自身压入栈中,并且值为1,然后第二个printf开始运行,但是第二个printf中还存在printf,则第2个printf继续压栈,值为2,执行最后一个printf,最后一个printf的结果为43,首先弹出栈,然后是第二个printf弹出,值为2,结果就是432,最后就是最外围的printf出栈,值为1,结果就是4321了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!