gpt4 book ai didi

c - c中的内存地址是正值还是负值?

转载 作者:太空狗 更新时间:2023-10-29 17:04:22 25 4
gpt4 key购买 nike

在c 中,我尝试打印出变量地址和某些函数的地址。我得到一个是负值,另一个是正值。我的问题是:为什么 C 不代表所有负值或所有正值?

这是我的代码:

int foo() { 
return 0;
}

int main() {

int a;
printf("%d\n",&a);

printf("%d\n",foo);

return 0;
}

结果如下:

-1075908992 134513684

最佳答案

内存地址不应该以那种方式被解释为带符号的整数。数字的符号取决于最高位集合(假设二进制补码表示,这是目前使用的绝大多数系统所使用的),因此 32 位系统上 0x80000000 以上的内存地址将为负数,而内存0x80000000 以下的地址将为正。这没有什么实际意义。

您应该使用 %p 修饰符打印内存地址;或者,有些人使用 %08x 打印内存地址(或 %016llx 在 64 位系统上)。这将始终打印为十六进制的无符号整数,这比带符号的十进制整数更有用。

int a;
printf("%p\n", &a);

关于c - c中的内存地址是正值还是负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689423/

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