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

请教:动态分配的指向变长数组的指针的术语及相关问题

指向变长数组(VLA)的指针:C语言动态连续二维数组写法解析

你提到的int (*array)[cols]这种写法,准确术语是指向变长数组(VLA)的指针——如果cols是编译期常量,也可称其为指向固定大小数组的指针,但这里cols是运行时确定的值,因此属于指向变长数组的指针范畴。

与指针数组(int **)的核心区别

  • int **array是指针数组:它本身是一个数组,每个元素都是指向独立一维数组的指针,内存分散存储,释放时需要先逐个释放子数组,再释放指针数组本身。
  • int (*array)[cols]是单个指向数组的指针:它指向一块连续的rows * cols大小的内存,这块内存被逻辑划分为rows个长度为cols的一维数组,内存连续,仅需一次free(array)即可释放全部内存,且缓存访问效率更高。

为什么支持运行时确定的rows和cols

C99标准引入了变长数组(VLA),允许数组维度在运行时动态确定。int (*array)[cols]作为指向VLA的指针,能在运行时绑定到malloc分配的对应大小的连续内存块上,从而实现无需编译期确定维度的动态二维数组分配。

内容的提问来源于stack exchange,提问作者mkdrive2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57