簡體   English   中英

我如何解釋這個簡單的C代碼的輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM