#include<stdio.h>
int main()
{
int i=10;
printf("%d",printf("%d",i));
return(0);
}
在Turbo C输出如何解释这个简单的C代码的输出?
我是初学者。那么你能解释这个代码的工作原理吗?
#include<stdio.h>
int main()
{
int i=10;
printf("%d",printf("%d",i));
return(0);
}
在Turbo C输出如何解释这个简单的C代码的输出?
我是初学者。那么你能解释这个代码的工作原理吗?
引用C11
,章§7.21.6.1
的
fprintf
函数返回发送的字符数,或负值 如果发生了输出或编码误差。
在你的情况下,内printf()
呼叫的参数外printf()
,因此内的函数调用将被执行,按功能参数评价的规则。
所以,在你的情况,第一内printf()
执行时,打印的i
的值,即,10
(2个字符)和printf()
调用的返回值被用作参数来%d
格式说明外printf()
,印刷2
。
由于没有可视化分隔符,因此您会看到彼此相邻的输出,显示为102
。
但为什么输出:102? – Ricky
@Ricky的意思是?你真的读过答案吗? –
printf()是一个C函数。它返回的int值等于它打印的字节数。
在你的情况下,内printf的印有“10”,所以它写2个字节,将返回2.
外的printf因此将打印“2”。最终结果:“102”(INNER的“10”,后面是“OUTER”的“2”)。
让我们拆开产生输出顶级语句:
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"
序列。
“printf”的手册页说了什么关于它的返回值? [请RTM](https://en.wikipedia.org/wiki/RTFM)。 –
如果插入'newline',它可能会更清晰。 'printf(“\ n%d”,printf(“%d”,i));' –