[英]Unexpected output when printing the value of an integer
#include<stdio.h>
void main()
{
int i = 5;
printf("%p",i);
}
我試圖在Linux上使用GCC編譯器編譯這個程序,在編譯程序時會發出警告說
%p expects a void* pointer
當運行時輸出為46600x3。
但是當我使用網站codingground.tutorialspoint.com在線編譯時,我得到的輸出等於0x5
即十六進制輸出,有人可以解釋原因嗎?
%p
需要某些東西(或指針)的地址。 您提供變量i
的值而不是地址。 使用
printf("%p",(void*)&i);
代替
printf("%p",i);
並且GCC將在沒有警告的情況下編譯程序,它將在您運行時打印存儲i
的地址。 &符號( &
)是地址運算符,它給出變量的地址。 由於格式說明符%p
期望類型為void*
的參數,而且&i
的類型為int*
強制轉換也是必要的。
printf("%d",i);
使用錯誤的格式說明符將導致UB(未定義的行為)
printf("%p",i);
使用錯誤的格式說明符將導致未定義的行為。 %p
期望在你的情況下你傳遞i
的值而不是地址的類型void *
的爭論,以便打印出你應該傳遞的地址&i
你應該用
printf("%d",i);
打印i
的整數值
代碼應該是這樣的
#include<stdio.h>
void main()
{
int i = 5;
printf("%d",i); /* To print value of i */
printf("%p",(void *)&i); /* Address of variable i */
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.