例如
printf("%u",&a);
给我输出
65524
这是一个16位地址。
答案 0 :(得分:4)
因为您使用了错误的格式说明符来调用undefined behavior。
要打印指针,您应该使用%p
格式说明符并将参数强制转换为void*
。像
printf("%p",(void *)&a);
将完成这项工作。
那就是说,你应该首先考虑virtual memory的概念。
答案 1 :(得分:1)
您还可以通过检查任何指针的大小而不是测试变量的地址来简单回答您关于地址大小的假设:
printf("%zu\n", sizeof(int*));
printf("%zu\n", sizeof(float*));
假设所有系统中的一个字节等于8位,您可以看到地址的大小。
请参阅此SO post
答案 2 :(得分:0)
要找到(大多数)当前常见系统的最高可能地址,请执行以下操作:
#include <stdint.h>
#include <stdio.h>
int main(void)
{
uintptr_t uip = (uintptr_t) -1;
void * vp = (void*) uip;
printf("%p\n", vp);
}