#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));' –