我看了一下,但找不到一個體面的答案。printf如何工作?
我不知道如何的情況下,printf的工作原理是這樣:
char arr[2] = {5,6};
printf ("%d%d",arr[0],arr[1]);
我在想的printf剛剛走過的格式,當它encouter%d例如讀取從它的當前位置的4個字節。 ..然而,這必須是錯誤的認識,導致以上作品完美。
那麼,我錯在哪裏?
我看了一下,但找不到一個體面的答案。printf如何工作?
我不知道如何的情況下,printf的工作原理是這樣:
char arr[2] = {5,6};
printf ("%d%d",arr[0],arr[1]);
我在想的printf剛剛走過的格式,當它encouter%d例如讀取從它的當前位置的4個字節。 ..然而,這必須是錯誤的認識,導致以上作品完美。
那麼,我錯在哪裏?
你說得對。但有argument promotion轉換(尤其是)您的char
:s到int
:s時,它們與「可變參數」功能,如printf()
使用。
此外,花車被提升爲雙打。 – 2010-02-04 10:29:54
當你說:
printf ("%d%d",arr[0],arr[1]);
字符串和評估兩個數組表達式的結果放置在堆棧上printf
被調用。 printf
從堆棧中獲取字符串,並使用其中的%格式化程序按順序訪問其他堆棧參數。具體如何,取決於您所說的實際%值 - 例如,%d
讀取4個字節,但是%f
讀取8(對於大多數32位體系結構)。
'int'不一定是4個字節。 – 2010-02-04 10:31:35