[英]How do I explain the output of this simple C code?
#include<stdio.h>
int main()
{
int i=10;
printf("%d",printf("%d",i));
return(0);
}
在Turbo C中輸出
102
我是初學者。 那么您能解釋一下這段代碼如何工作嗎?
printf
的文檔指出,它將返回一個整數,該整數表示寫入輸出流的字符數。
這意味着可以使用的返回值printf
以滿足%d
在另一個呼叫格式說明printf
,並且第二(外)調用將打印出寫在所述第一呼叫中的字符數。
i
等於10
,因此對printf
的第一次調用輸出數字10
並返回2
(字符串"10"
中的字符數),該值傳遞給對printf
的第二次調用,該命令打印2
,為您提供最終輸出102
。
讓我們分解一下產生輸出的頂級語句:
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"
序列。
引用C11
,第§7.21.6.1章
fprintf
函數返回傳輸的字符數,如果發生輸出或編碼錯誤,則返回負值。
在您的情況下,內部printf()
調用是外部printf()
的參數,因此將按照函數參數評估的規則執行內部函數調用。
因此,在您的情況下,首先執行內部printf()
,打印i
的值,即10
(2個字符),然后將printf()
調用的返回值用作外部的%d
格式說明符的參數。 printf()
,打印2
。
由於不存在可視分隔符,因此您看到的輸出彼此相鄰,顯示為102
。
printf()是C函數。 它返回一個等於其打印字節數的int值。
在您的情況下,INNER printf會打印“ 10”,因此它寫了2個字節並返回2。
因此,OUTER printf將打印“ 2”。
最終結果:“ 102”(INNER的“ 10”后跟OUTER的“ 2”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.