2016-11-15 117 views
0
#include<stdio.h> 
int main() 
{ 
int i=10; 
printf("%d",printf("%d",i)); 
return(0); 
} 

在Turbo C输出如何解释这个简单的C代码的输出?

我是初学者。那么你能解释这个代码的工作原理吗?

+2

“printf”的手册页说了什么关于它的返回值? [请RTM](https://en.wikipedia.org/wiki/RTFM)。 –

+0

如果插入'newline',它可能会更清晰。 'printf(“\ n%d”,printf(“%d”,i));' –

回答

2

printf的文档声明它将返回一个整数,该整数表示写入输出流的字符数。

这意味着可以使用的printf的返回值,以满足在另一呼叫的%d格式说明printf,和第二(外)调用将打印出写在所述第一呼叫中的字符数。

i等于10,所以printf第一呼叫输出数10并返回2,其被传递到第二呼叫到printf,打印2(字符串"10"中的字符数),给您最终产出102

+0

非常感谢你.. – Ricky

+0

@Ricky不用客气;一旦您找到满意答案,您可以通过点击投票图标下方的复选框将其标记为已接受。 –

0

引用C11,章§7.21.6.1

fprintf函数返回发送的字符数,或负值 如果发生了输出或编码误差。

在你的情况下,内printf()呼叫的参数外printf(),因此内的函数调用将被执行,按功能参数评价的规则。

所以,在你的情况,第一内printf()执行时,打印的i的值,即,10(2个字符)和printf()调用的返回值被用作参数来%d格式说明外printf() ,印刷2

由于没有可视化分隔符,因此您会看到彼此相邻的输出,显示为102

+0

但为什么输出:102? – Ricky

+0

@Ricky的意思是?你真的读过答案吗? –

0

printf()是一个C函数。它返回的int值等于它打印的字节数。

在你的情况下,内printf的印有“10”,所以它写2个字节,将返回2.

外的printf因此将打印“2”。最终结果:“102”(INNER的“10”,后面是“OUTER”的“2”)。

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"序列。