C语言中指向数组的指针分配多少字节?是8还是20?原因?
指向数组的指针的内存分配问题
结论很明确:这个指向数组的指针本身被分配8字节,20字节是它指向的数组的大小,原因如下:
- 先明确
int (*ptr)[5]的类型:这是一个指向包含5个int元素的数组的指针,本质上它还是指针类型,只是指向的对象是数组而已。 - 在64位系统里,所有指针(不管指向的是int、数组还是结构体)的大小都是8字节——因为64位系统的地址总线宽度是64位,需要8字节来存储一个内存地址,所以
sizeof(ptr)返回的8就是指针自身占用的内存。 - 而
*ptr代表的是指针指向的目标对象,也就是那个有5个int元素的数组。GCC中int默认占4字节,5*4=20,所以sizeof(*ptr)返回20,这是数组的大小,和指针本身的内存分配没关系。
对应的测试代码:
#include <stdio.h> int main() { int (*ptr) [5]; printf ("%lu\n" , sizeof (ptr)); printf ("%lu\n" , sizeof (*ptr)); }
内容的提问来源于stack exchange,提问作者Baranitharan
相关产品推荐
相关产品推荐

