You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:42:05