#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(Undefined Behavior)
关于c - 打印整数值时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27753922/