在这段代码中(暂时保留严格的别名):
#include<stdio.h>
int main(void)
{
int i=10;
void *ptr=&i;
printf("%lu\n",sizeof(ptr));
printf("%d\n",*(int *)ptr);
return 0;
}
它将sizeof(void*)
设为 8 ,但是在将其类型转换为int*
后已取消引用时,它会精确打印分配给变量 i 。
编译器如何推送/限制大小为8个字节的指针以指向下一个4个字节(在我的系统上为sizeof(int)
)?
答案 0 :(得分:2)
我认为8个字节是为了将“ i”的地址(int i = 10;)保存在内存中,因此这并不意味着您要保存哪种数据,它只是保存了地址内存位置并且需要8个字节才能适合需要强制转换的任何数据类型