我正在尝试打印变量(特别是 argc)的内存地址。我正在使用 printf,我知道 %x 返回一个无符号的十六进制整数,而 %p 返回一个指针地址。下面是我的简单代码,供引用
int main (int argc, char **argv) {
printf("argc: addr=%x addrp=%p val=%x\n",&argc,&argc,argc);
return 0;
}
这样跑:./a.out 这是
它输出:argc: addr=af5144cc addrp=0x7ffcaf5144cc val=3
我看到 %x 返回一个字节的地址,对吗?因为它有 8 个数字或位?
但是,%p 返回的是相同的字节,前面有更多信息。什么是“0x7ffc”部分,它是什么意思?它是内存地址的一部分还是指出了某种类型的信息?我知道 0x 部分表示它是一个十六进制数。 %x 或 %p 是真正的内存地址吗?谢谢!
最佳答案
%x
打印一个 unsigned int
,在大多数现代平台上,它是 32 位的。
%p
打印特定于平台的指针值。
有些平台是 32 位的,有些是 64 位的(也可能有其他大小)
sizeof(unsigned int)
往往等于sizeof(void*)
,但完全不能保证,常见的见32位unsigned int
与 64 位 void*
。
结果,%x
和 %p
打印出不同的宽度。
关于c - 使用 printf 打印变量的内存地址时,为什么 %x 和 %p 返回不同但相似的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46980733/