我在想,为什么这个程序的输出结果是5621?
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
printf
函数返回其输出的字符数量。
首先,内部最深层的printf
函数被调用,输出数字56,然后它将输出的字符数量2返回给中间层的printf
函数,输出数字2。最后,输出的字符数量1传递到外层的printf
函数,生成数字串5621
。
来自 printf
的man页面
返回值
成功返回后,这些函数将返回打印的字符数(不包括用于结束字符串输出的空字节)。
内部的printf
打印56
已经打印了2个字符,因此下一个%d
格式说明符的参数是2
中间的printf
只打印了1个字符,因此外部%d
格式说明符的参数是1
只有外部的printf
包含换行符,因此前面的调用在同一行上依次输出,得到5621\n
。
这相当于
#include <stdio.h>
main()
{
int n, i = 56;
n = printf("%d",i);
n = printf("%d", n);
n = printf("%d\n", n);
}
printf返回写入的字符数。
printf()
函数返回打印出来的字符数:
printf("%d",i)
输出值为56
。
printf("%d",printf("%d",i))
先输出56
,然后输出2
,即数字56
中有2
个字符。
printf("%d\n",printf("%d",printf("%d",i)))
先输出56
,然后输出2
,接着输出2
这个数字包含1
个字符。
printf()
函数返回在控制台打印的字符数。
例如,在以下printf调用之后,num_chars
将具有值10
,因为字符串"Hi haccks\n"
由10个非空字符组成,将在屏幕上打印。
num_chars = printf("Hi haccks\n");
// ^^^^^^^^^ ^
// 12345678910
注意: \n
是单个第10个字符。因此,在上述代码中,从printf返回的值被分配给num_chars
变量。
在您的代码中,给定语句中,内部的printf()
打印值,然后返回外部printf打印的值的字符数,如下所示:
// 1 2 3
printf("%d\n", printf("%d", printf("%d",i))); // Here i = 56
^ ^ ^
print: 1 print: 2 print: 56
returns: 1 returns: 1 returns: 2
// 3 2 1 <--Order of printf called
所以它输出 5621
main
没有返回类型。 - StoryTeller - Unslander Monicaprintf
的内容,了解其返回值,再学习关于栈的知识,你就会理解。 - Some programmer dudeint
。 - JAB