gpt4 book ai didi

c - 使用 printf 打印变量的内存地址时,为什么 %x 和 %p 返回不同但相似的值?

转载 作者:行者123 更新时间:2023-12-04 09:37:13 27 4
gpt4 key购买 nike

我正在尝试打印变量(特别是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com