📜  数组 2d 动态分配 c++ (1)

📅  最后修改于: 2023-12-03 14:54:58.287000             🧑  作者: Mango

数组 2d 动态分配 c++

在c++中,使用动态分配的方式创建2d数组可以让程序更加灵活,不必事先确定数组大小,而是可以根据程序运行情况来动态调整,避免了数组过大导致浪费内存,数组过小导致程序崩溃等问题。以下是如何在c++中动态分配2d数组的介绍。

创建空的2d数组

如果希望创建一个空的2d数组,则需要先通过new运算符从堆上分配一块连续的内存空间,然后再按行和列来构建数组,示例代码如下:

int rows = 3;
int cols = 4;

int** array2d = new int*[rows];

for(int i = 0; i < rows; i++)
{
    array2d[i] = new int[cols];
}

这里首先定义了一个3行4列的数组,然后通过new运算符先创建了一个长度为3的int类型指针数组,然后再通过循环为每个指针分配一个长度为4的数组。

初始化2d数组

在创建2d数组时,还可以通过构造函数对数组进行初始化,示例代码如下:

int rows = 3;
int cols = 4;

int** array2d = new int*[rows]();

for(int i = 0; i < rows; i++)
{
    array2d[i] = new int[cols]();
}

这里在创建数组时,在new运算符后面加上了一个括号,这表示对指针数组和每行数组都进行了值初始化。

给2d数组赋值

通过动态分配的方式创建的2d数组,可以通过引用数组元素进行修改,示例代码如下:

int rows = 3;
int cols = 4;

int** array2d = new int*[rows];

for(int i = 0; i < rows; i++)
{
    array2d[i] = new int[cols];
}

for(int i = 0; i < rows; i++)
{
    for(int j = 0; j < cols; j++)
    {
        array2d[i][j] = i * j;
    }
}

这里使用了两层循环,遍历整个数组,并通过数组下标来修改每个元素的值,在本例中将数组的值设为了行数和列数的乘积。

释放2d数组空间

动态分配的数组在使用完后需要手动释放内存,以防止内存泄漏,释放2d数组可以按照以下方式进行:

int rows = 3;
int cols = 4;

int** array2d = new int*[rows];

for(int i = 0; i < rows; i++)
{
    array2d[i] = new int[cols];
}

// do something with array2d

for(int i = 0; i < rows; i++)
{
    delete [] array2d[i];
}
delete [] array2d;

这里通过循环依次释放每个指针所指向的数组,最后再释放指针数组占用的内存空间。