请教:动态分配的指向变长数组的指针的术语及相关问题
指向变长数组(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
相关产品推荐
相关产品推荐

