所以我的想法:
二维数组是数组的数组。如果一个数组是 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/