32位系统下该C代码中变量a的sizeof输出结果是什么?
C指针大小问题解答
代码示例
#include<stdio.h> #include <stdlib.h> int main() { char *a = malloc(sizeof(int) * 18); printf("%d",sizeof(a)); }
问题解答
- 在32位系统中,变量
a的大小是4字节,和你在64位系统中得到的8字节结果不同。 - 本质原因:
a是char*类型的指针变量,指针的大小由系统的地址空间宽度决定。32位系统的地址总线为32位,指针需要4字节来存储内存地址;64位系统的地址总线为64位,指针则需要8字节。 - 额外说明:
malloc(sizeof(int)*18)仅负责在堆区分配一块内存,a只是保存了这块内存的起始地址,sizeof(a)测量的是指针变量自身的大小,而非分配的内存块的大小。
内容的提问来源于stack exchange,提问作者Natoshi SakiSaki
相关产品推荐
相关产品推荐

