printf函式的返回值

先看下面一段程式:

文末會給大家推薦幾本好書,希望能夠需要的朋友一點幫助!

#include <stdio.h>
int main()
{
int i = 123;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}

printf函式裡面又嵌入了printf函式,你認為此段程式會列印出什麼?

程式的實際執行結果是:

對於這個執行結果,你怎麼看?
我們來一步步分解printf函式,看看為啥會輸出這個結果。 

程式中的print函式是這樣寫的:printf(“%d\n”,printf(“%d”,printf(“%d”,i))); 
一共有三個printf函式,我們可以使用一些代號來簡化這個printf函式,如下:
代號A: printf(“%d”,printf(“%d”,i));
代號B: printf(“%d”,i)

則程式程式碼可以簡化為:printf(“%d\n”,A); 那麼我們就先來求A。
而A,又可以簡化為:printf(“%d”,B);那麼我們就先來求B。

B是  printf(“%d”,i),列印出“123”,即在執行結果中,你最先看到的是123。printf函式的返回值是printf實際控制輸出的字元數,那麼列印的123 就是3個字元,因此printf(“%d”,i)返回的就是3,也就是B是3,那麼,A就可以寫為printf(“%d”,printf(“%d”,3));列印出3,即在執行結果中,你緊接著會看到3。而列印出的3是1個字元,因此A就是1,那麼printf(“%d\n”,A); 實際上就是printf(“%d\n”,1); 列印出1,即在執行結果中,你最後看到的就是1.

1. 2017.9.全國計算機C語言等級考試上機新版題庫、模擬試卷
2. C Primer Plus 第6版 中文版
3.  程式設計師面試寶典(第5版)