c - C 中使用 %p 的变量地址

标签 c pointers

例如,

int a = 6;
printf("%p", &a);

这会打印出右指针的地址吗? 但是如果我们不使用 & 打印呢?

int a = 6;
printf("%p", a);

谁能告诉我打印出来的是什么?

最佳答案

这是未定义的行为,因为 %p 需要一个 void*

printf("%p", a);

允许添加显式转换,但行为是实现定义的:

printf("%p", (void*)a);

“实现定义”意味着编译器在将 int 转换为 void* 时可以自由地做任何它想做的事。参见 this Q&A从标准中获取准确的报价。

在许多实现中,您会看到一个指针分配了 int ( demo 1 ) 的数值。其他实现会警告您该行为毫无意义。如果您将警告视为错误,代码将无法编译 ( demo 2 )。

关于c - C 中使用 %p 的变量地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840774/

相关文章:

c - "Illegal Instruction (core dumped)"发生在 valgrind

c++ boost::any 在不知道类型的情况下使用值

c - STM32闪烁的LED错误寄存器?

c - 这个快速排序有什么问题吗?

c - 如何从 Swift 调用标准 C 库?

c - 可靠地访问指针记帐数据

c - C中从文件到结构

c++ - (c++) 将 int 转换为 char 指针(int 是 int 形式的字符)

检查 ISBN 以查看其在 C 语言中是否有效

c - 将 int 写入 char 数组