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

标签 c pointers gcc compiler-errors

#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/

相关文章:

c++ - 从 c 函数在 qtextedit 上显示消息

c - 如何链接内核模块来使用它们的功能?

c - 是否可以从给定索引开始在 C 中使用 getLine()?

c - 使用Makefile中的标志进行编译

c - Make 似乎忽略了我的 CFLAGS 和 LDFLAGS

c++ - GCC 虚拟内存耗尽 : Permission denied

c - 在Linux下用C打开并写入BMP文件,或将现有的Windows应用程序移植到Linux

c - 《C 编程语言》中的指针数组(第 5.6 章)示例

c++ - 避免在 C++ 中重复树的左右子节点

c++ - 将结构传递给函数时出现意外结果