c - %p 和 0x%08x 有什么区别

标签 c

这个问题说明了一切。 在 c 中,当试图获取指针或其他东西的地址时,我知道命令:

%p

0x%08x

我知道它们都返回地址,但为什么要一个一个地使用另一个?

检查一下:

int main () {

int i[1] = {1};
int *int_pointer;

int_pointer = i;

printf("0x%08x\n",&i);
printf("0x%08x\n", int_pointer);

printf("%p\n",&i);
printf("%p\n", int_pointer);

}

此代码产生此响应: 0x60506b00 0x60506b00 0x7ffe60506b00 0x7ffe60506b00

如果两者都引用地址,那么它们为什么不同取决于您使用的是 %p 还是 0x%08x?

哪个是实际地址?

最佳答案

printf("%p", p) 需要一个 void* 指针作为参数。 printf("0x%08x", n) 需要一个 unsigned int 作为参数。

如果 unsigned int 和指针在堆栈上的表示中“足够相似”,则将指针传递给后者可能仍然有效。但无论您的机器是什么,为了安全和正确,始终使用带指针的 "%p"

关于c - %p 和 0x%08x 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324673/

相关文章:

c - 嵌入式系统中的AT命令

c - sizeof(double) 一次是8,另一次是0?

c - Linux C 将缓冲区从 while 循环问题写入文件

c++ - Dev C++ Mingw不再编译

c - 在 C 中反转字符串

c - 这段 C 代码有什么问题? child 不回来了?

c++ - fgets 中的 vector 类型

C、用文本文件保存/读取NULL

c - 如何用GCC生成IP相对寻址指令

c - 上下二叉树显示