簡體   English   中英

打印整數值時出現意外輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM