如果我的计算机是32位系统,它有32位地址吗? 但是当我在C中打印任何内存地址时,为什么我的地址<32bit?
例如
printf("%u",&a);
给我输出
65524
这是一个16位地址。
因为您使用了错误的格式说明符来调用未定义的行为 。
要打印指针,您应该使用%p
格式说明符并将参数转换为void*
。 就像是
printf("%p",(void *)&a);
会做的。
也就是说,你应该首先考虑虚拟内存的概念。
您还可以通过检查任何指针的大小而不是测试变量的地址来简单地回答您关于地址大小的假设:
printf("%zu\n", sizeof(int*)); printf("%zu\n", sizeof(float*));
假设所有系统中的一个字节等于8位,您可以看到地址的大小。
请看这个SOpost
要为当前常见系统(大多数)找到最高可能的地址,请执行以下操作:
#include #include int main(void) { uintptr_t uip = (uintptr_t) -1; void * vp = (void*) uip; printf("%p\n", vp); }