#include<stdio.h>
int main()
{
int i=10;
printf("%d",printf("%d",i));
return(0);
}
Turbo C中的输出
102
我是初学者。那么你能解释一下这段代码是如何工作的吗?
答案 0 :(得分:2)
printf
的文档声明它将返回一个整数,该整数表示写入输出流的字符数。
这意味着您可以使用printf
的返回值来满足%d
的另一个调用中的printf
格式说明符,而第二个(外部)调用将打印出来的数量第一次通话中写的字符。
i
等于10
,因此第一次调用printf
会输出数字10
并返回2
(字符串中的字符数{ {1}}),传递给"10"
的第二次调用,打印printf
,为您提供最终输出2
。
答案 1 :(得分:1)
让我们拆分产生输出的顶级语句:
printf("%d",printf("%d",i));
printf
函数调用,将两个参数传递给函数printf
的第一个参数是格式字符串"%d"
printf
的第二个参数是调用printf("%d",i)
的结果需要在拨打电话之前评估顶级printf
的参数,即printf("%d",i)
。表达式具有值和副作用。副作用是将"10"
打印到输出,值是打印的字符数,即2
。
由于在进行调用之前会对参数进行求值,因此首先调用printf("%d",i)
,生成输出10
。现在调用顶级printf
,它会生成输出2
,完成您看到的"102"
序列。
答案 2 :(得分:0)
引用/usr/local/bin/aws s3 mv /backup-directory/20161030002947.Pg s3://my-s3-bin/20161030002947.Pg
,章节§7.21.6.1
C11
函数返回传输的字符数或负值 如果发生输出或编码错误。
在您的情况下,内部fprintf
调用是外部printf()
的参数,因此将根据函数参数评估规则执行内部函数调用。
因此,在您的情况下,首先执行内部printf()
,打印printf()
的值,即i
(2个字符)和{{1}的返回值} call用作外部10
中printf()
格式说明符的参数,打印%d
。
由于没有可视分隔符,您会看到彼此相邻的输出,显示为printf()
。
答案 3 :(得分:0)
printf()是一个C函数。它返回一个等于它打印的字节数的int值。
在你的情况下,INNER printf打印“10”,所以它写了2个字节并将返回2.
OUTER printf因此会打印“2”。
最终结果:“102”(INNER的“10”后跟OUTER的“2”)。