我正在解决一个问题,需要我编写一个返回指向二维整数数组的指针的函数,因此我想了解如何使用 malloc 分配二维数组或多维数组的内存?在这种情况下如何释放内存?在这种情况下指针如何工作?我对我所询问的所有事情(malloc、free、指针和数组)都了解一些,所以当你解释时,不要费心去解释我刚才提到的事情的基础知识,除非有必要。
我正在学习这些概念,但我遇到了困难。
从技术上讲,C 并没有真正的“多维”数组。它所拥有的只是普通数组,但每个元素又可以是另一个数组。这就是“多维”普通数组的工作原理:
int arr[X][Y];
这里
arr
是一个由 X
元素组成的数组,每个元素都是由 Y
元素组成的数组。
处理“动态”数组的嵌套的最简单和天真的方法基本上是相同的:对于简单的“一维”数组,您有一个指针。因此,要将其嵌套在另一个动态创建的数组中,您需要一个指针数组或指向指针的指针:
int **arr;
要为其创建内存,我们首先创建外部数组:
arr = malloc(X * sizeof(*arr)); // sizeof(*arr) is the same as sizeof(int *)
然后我们需要创建每个嵌套数组:
for (size_t x = 0; x < X; ++x)
{
arr[x] = malloc(Y * sizeof(*arr[x])); // sizeof(*arr[x]) is the same as sizeof(int)
}
最后我们初始化所有单独的数组元素:
for (size_t x = 0; x < X; ++x)
{
for (size_t y = 0; y < Y; ++y)
{
arr[x][y] = 0;
}
}
还有其他方法可以创建动态多维数组,但这很可能是您的老师希望您创建的方法。