打印整数值时出现意外输出

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 即十六进制输出,谁能解释一下原因?

printf("%p",i);

使用错误的格式说明符将导致未定义的行为。 %p 期望类型 void * 的争论在你的情况下你传递的是 i 的值而不是地址,以便打印出你应该传递的地址 &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 */
}

%p 期望某物(或指针)的地址。您提供变量 i 的值而不是地址。使用

printf("%p",(void*)&i);

而不是

printf("%p",i);

并且 GCC 将在没有警告的情况下编译程序,并且当您 运行 时它会打印存储 i 的地址。符号 (&) 是寻址运算符,它给出了变量的地址。强制转换也是必需的,因为格式说明符 %p 需要一个类型为 void* 的参数,而 &i 是类型 int*


如果要打印变量的值,使用

printf("%d",i);

使用错误的格式说明符将导致UB(Undefined Behavior)