2016-03-23 59 views
-6

我發現一個問題,在互聯網這樣的,有一個ç程序,它喜歡 -
爲什麼printf()打印這樣的東西?

int main(){ 
    int a = 123; 
    printf("%d", printf("%d",a)); 
    return 0; 
} 

我在代碼塊運行這個程序,並找到導致。
我的問題是,爲什麼printf()的行爲是這樣的?

+0

好奇:你期望打印什麼? – chux

+0

我沒想到什麼。我只是在代碼塊中運行代碼並找出這樣的輸出。所以我很好奇,爲什麼? @chux –

回答

5

參見printf是返回int的函數。其中int是印數characters

這是一個printf原型

int printf(const char *restrict format, ...) 

按照您的程序:

printf("%d", printf("%d",a)); 

printf("%d",a)其中a123,所以它打印123並返回3
printf("%d", printf("%d",a));成爲printf("%d",3);所以,沖印3單獨

所以你的輸出是:
1233

2

打破它,理解它。 printf函數的返回值 成功時,是成功寫入的字符總數。

printf("%d",a)成功寫入3個字符,然後返回值作爲第二個參數被傳遞到原始呼叫作爲一個參數被評估

printf("%d", 3); 

printf被傳遞,然後其結果被傳遞在所述外printf

1

printf總是返回字符數。由於a = 123意味着3個字符,所以輸出即爲1233.您將從這個例子中理解。

int main(){ 
    int a = 123; 
    int b=printf("%d",a); 
    printf("\n%d", b); 
    return 0; 
} 
相關問題