下面有两种方法来分配您的二维数组:
cell *(*p_cell)[height][width] = malloc(sizeof(*p_cell));
p_cell
是一个指向指针数组的二维指针,该指针数组的每个元素都指向一个 cell
对象。可以通过坐标 i
, j
获取对应的元素:
cell *p = (*p_cell)[i][j];
将 p_cell
定义为数组指针可能更容易:
cell *(*p_cell)[][width] = malloc(height * sizeof(*p_cell));
您可以在坐标
i,
j处获取该物品。
cell *p = p_cell[i][j];
上述数组未初始化,您需要使用指向现有cell对象的指针或分配的cell对象的指针对其进行初始化。
如果二维数组仅在函数内部使用且宽度和高度不太大,则可以使用本地存储定义二维数组:
cell *p_cell[height][width];
由于
width
和
height
是动态值,因此无法进行静态初始化。您必须使用嵌套循环(如分配的数组)来初始化此数组。
问题是:
您真的需要元素类型为指向cell
的指针吗?只有在将其中一些指针指向同一个对象或具有空值或指向其他地方引用的
cell
对象时才有用。否则,最好使用
cell
对象的数组,可以是函数内部的局部数组或使用
malloc()
或
calloc()
分配的数组:
cell p_cell[][width] = calloc(sizeof(*p_cell), height);
cell *p_cell[height][width] = malloc(height*width*sizeof(cell*));
不是有效的 C 语言,因此不能使用它。也许你想使用cell (*p_cell)[height][width] = malloc(height*width*sizeof(cell*));
?在不知道应用目标的情况下,"最佳方式" 是无法确定的,需要进行广泛的讨论。 - chux - Reinstate Monicacell *p_cell[height][width];
已经分配了一个大小为height
xwidth
的指向cell
的指针数组,即p_cell
。 - alk