c - 二维数组和动态分配如何工作?

标签 c malloc multidimensional-array

所以我的想法:

二维数组是数组的数组。如果一个数组是 X × Y,那么每个 X 都指向一个长度为 Y 的数组。这部分正确吗?这就是为什么当你想在 C 中动态分配数组时你必须说

array=(type **)malloc(X*sizeof(type *)). 

类型*是告诉编译器每个数组索引将是指向另一个数组的指针,因此它应该足够大以容纳数组的指针?

为什么需要这个循环?

for(i =0;i<X;i++)
{
array[i]=(type *)malloc(Y*sizeof(type))
}

Actor 阵容

(type *)

需要,因为每个索引都是指向一维数组的指针?但这一次在 malloc 中,我们可以只说 (type) 而不是 (type *) 因为索引将不再保存指针?

编辑

哦..所以这只是通过让一维数组中的每个索引指向另一个一维数组来模仿二维数组。好的。在这种情况下,我的逻辑是为什么每个 malloc 都有特定的参数有意义? 这里的代码取自这个SO问题 dynamic allocation/deallocation of 2D & 3D arrays

最佳答案

您的代码不涉及实际的二维数组。这是一个二维数组:

int myArray[X][Y];

它不涉及指针。

您的代码涉及一个指向指针数组的指针,这不是同一件事。

<小时/>

Why is this loop needed?

因为否则指针数组中的所有指针都不会指向任何存储。

<小时/>

Is the cast needed?

没有。

关于c - 二维数组和动态分配如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811265/

相关文章:

C语言编程

c - 创建大于 100000 的数组时出现段错误

c - 如何使用malloc在链表中插入节点?

javascript - 我如何做一个数组组并对其进行计数,就像在 MySQL 中按给定列 id 分组一样?

java - if-else if block 不包含else

c - 复杂数据类型的内存分配

c - malloc内存分配

c++ - 如何将文件中的字符串和整数放入多维数组?

php - 将维度和指标数据添加到数组

c - 如何在mingw中检测命令行参数的字符编码