#include <stdio.h>
int main(void)
{
int i=10;
printf("%p",i);
return 0;
}
輸出: -林困惑關於%P符
0xa
%P - 我讀%P是用來打印在printf的指針,但在這裏我是一個整數,也沒有指針聲明如何「0xa」得到輸出。
#include <stdio.h>
int main(void)
{
int i=10;
printf("%p",i);
return 0;
}
輸出: -林困惑關於%P符
0xa
%P - 我讀%P是用來打印在printf的指針,但在這裏我是一個整數,也沒有指針聲明如何「0xa」得到輸出。
您的代碼的行爲是undefined,因爲%p
不適用於int
類型的適當格式說明符。
允許編譯器做任何東西,其中包括優化您的代碼到int main(){}
。
從技術上講,這是未定義的行爲,因爲%p
是int
的錯誤格式說明符。
但是,如果你的平臺是32位,然後%p
通常歸結爲印刷在大多數實現十六進制所提供的值,因此printf("%p", 10);
通常會打印在這些實現0xA
或0x0000000A
。
無論如何,不要使用不匹配的格式說明符,因爲即使它看起來工作,它也會導致undefined behaviour。
輸入錯誤,輸出錯誤。一般來說,'printf'只打印你輸入的內容。在這裏你把一個整數,並打印這個整數。由於'%p'不是適用於整數的格式說明符,因此您也有未定義的行爲 – Gerhardh
順便說一句,恕我直言,問題沒有錯。寫得很好,也是一個可編輯的例子。 – Bathsheba