C 中二维数组的内存分配,使用 malloc。释放和指针

问题描述 投票:0回答:1

我正在解决一个问题,需要我编写一个返回指向二维整数数组的指针的函数,因此我想了解如何使用 malloc 分配二维数组或多维数组的内存?在这种情况下如何释放内存?在这种情况下指针如何工作?我对我所询问的所有事情(malloc、free、指针和数组)都了解一些,所以当你解释时,不要费心去解释我刚才提到的事情的基础知识,除非有必要。

我正在学习这些概念,但我遇到了困难。

arrays c pointers malloc
1个回答
-1
投票

从技术上讲,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;
    }
}

还有其他方法可以创建动态多维数组,但这很可能是您的老师希望您创建的方法。

© www.soinside.com 2019 - 2024. All rights reserved.