例如,
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/