2017-01-24 91 views
0
int main (void){ 
const int y = 99; 
printf("%d\n", printf("y = %d", y)); 
} 

這個程序打印「y = 996」,我想幫助理解。解釋printf的返回值

首先,

printf("y = %d", y)打印出y = 99

所以最終的表達式的其餘部分是:

printf("%d\n", "y = 99"); 

但這應該是爲%d無效的預計數字,而不是charArray?

+5

不,'printf' _doesn't_不返回已打印的字符串。印刷本身只是一個副作用。 – ForceBru

+2

如果你[查找](http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html)printf,你會看到什麼是返回值。 – user2357112

回答

2

printf函數返回打印的字節數。該值就是傳遞給第二個電話的內容。

內線呼叫打印y = 99這是6個字符。所以外呼叫接收6作爲第二個參數:

printf("%d\n", 6); 

所以輸出爲y = 996

1

printf雖然將打印出字符串stdout,它所返回是表示它打印出的字符數的整數。

嵌套調用printfprintf("y = %d", y),打印輸出99和返回6,因爲該字符串"y = 99"長6個字符,這使得以printf外呼叫,這需要嵌套調用的返回值以printf作爲參數,產生輸出6,給您996

2

最終輸出讓我舉一個簡單的例子來清除您的疑問:

樣本:

void main(void) 
    { 
    int b=printf("hellow"); 
    printf("%d",b); 
    } 

輸出:

6 

的printf( 「消息」)是返回「沒有預定義的方法。的本消息」如上面的例子中的字符

你代碼:

int main (void){ 
const int y = 99; 
printf("%d\n", printf("y = %d", y)); 
} 

注:在打印該消息的printf()之後始終返回int值是否定的,因爲返回類型的字符的printf()的類型爲int型

步驟1:內printf()函數打印99第一

步驟2:在食堂字符執行後返回6,其是否定的。年齡。

消息是 「Y =%d」

步驟3:6是由外部的printf保持()函數爲: -

printf("%d",6); 

所以,它使輸出combinely:

996