编译器采取的限制指针所指向的内存的操作

时间:2018-09-22 10:39:50

标签: c

在这段代码中(暂时保留严格的别名):

 #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))?

1 个答案:

答案 0 :(得分:2)

我认为8个字节是为了将“ i”的地址(int i = 10;)保存在内存中,因此这并不意味着您要保存哪种数据,它只是保存了地址内存位置并且需要8个字节才能适合需要强制转换的任何数据类型