2010-02-04 112 views
6

我看了一下,但找不到一個體面的答案。printf如何工作?

我不知道如何的情況下,printf的工作原理是這樣:

char arr[2] = {5,6}; 

printf ("%d%d",arr[0],arr[1]); 

我在想的printf剛剛走過的格式,當它encouter%d例如讀取從它的當前位置的4個字節。 ..然而,這必須是錯誤的認識,導致以上作品完美。

那麼,我錯在哪裏?

+0

'int'不一定是4個字節。 – 2010-02-04 10:31:35

回答

9

你說得對。但有argument promotion轉換(尤其是)您的char:s到int:s時,它們與「可變參數」功能,如printf()使用。

+0

此外,花車被提升爲雙打。 – 2010-02-04 10:29:54

1

當你說:

printf ("%d%d",arr[0],arr[1]); 

字符串和評估兩個數組表達式的結果放置在堆棧上printf被調用。 printf從堆棧中獲取字符串,並使用其中的%格式化程序按順序訪問其他堆棧參數。具體如何,取決於您所說的實際%值 - 例如,%d讀取4個字節,但是%f讀取8(對於大多數32位體系結構)。