问题描述
- 解释下,谢谢,这个程序的运行结果
-
#include"stack.h"
#includeint _tmain()
{
int i=43;
printf("%dn",printf("%d",printf("%d",i)));
return 0;
}
请问结果是?为什么?
解决方案
今天又回想这个问题,发现不是之前说的那个原因,顺序还是从里向外进行输出,第一次是输出i的原值,而第二次则是输出第一结果的长度,因为第一次是43,长度为2,所以输出结果为2,第三次捕获到第一次结果为2,长度为1,所以输出1,如果你在第一个%d后面加空格,则第二次输出的就是3,而不是2了。
解决方案二:
结果是4321,为什么是这个结果,这是我的一个猜想,因为最外围的printf中的参数是printf中时,它会自身压入栈中,并且值为1,然后第二个printf开始运行,但是第二个printf中还存在printf,则第2个printf继续压栈,值为2,执行最后一个printf,最后一个printf的结果为43,首先弹出栈,然后是第二个printf弹出,值为2,结果就是432,最后就是最外围的printf出栈,值为1,结果就是4321了。
时间: 2024-10-31 10:14:28