gpt4 book ai didi

C++ 二维数组分配

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:06 24 4
gpt4 key购买 nike

有人能解释一下这里每一行的真正作用吗?我知道总体上它分配了4个空间,但我不明白细节。

        int** arrayArray; 
arrayArray= new int*[4];
for (int x = 0; x < 4; ++x)
{ arrayArray[x] = new int[4];}

最佳答案

你的数组是一个二维数组,所以它的大小是“x x y”的形式。您的数组包含的总 int 将为 x*y。我将 x 称为行号,y 称为列号。

您似乎需要一个总共有 4 个 int 的数组,因此您的行号和列号应该是 4 的乘积,例如 2x2。请记住,以下答案处理的是一个 4x4 数组,它总共有 16 个 int

分配:

int** arrayArray;

这一行定义了一个变量arrayArray,它是一个指针(pointer of int)。喜欢

(arrayArray) -> * -> int

所以 arrayArray[0] 给你一个 int 的指针,而 arrayArray[0][0] 因此给你一个 int(在数组中)。

arrayArray = new int*[4];

这一行分配了一个可以容纳4个int指针的空间,并设置arrayArray指向那个空间(别忘了arrayArrayint 指针的指针。)。

这里的 4 表示行号。

for (int x = 0; x < 4; ++x)
arrayArray[x] = new int[4];

对于 arrayArray 中的每个指针,将其设置为指向 4 个 int 的空间。

这里new int[4]中的4表示列号。

所以这个数组的结构会是这样的

Visualized image

解除分配(免费):

请注意,arrayArray 本身只是指向其他 4 个指针的指针。如果你想释放整个数组,你不只是释放 4 个指针的空间。您需要释放这些指针指向的每个空间,否则会导致内存泄漏。例如你想释放整个数组,它只是分配的逆向,首先释放所有空间 arrayArray 指向:

for (int x = 0; x < 4; ++x)
delete[] arrayArray[x];

在C++中,如果你想删除new something[]分配的空间,你需要delete[]而不是删除

然后释放数组本身:

delete[] arrayArray;

关于C++ 二维数组分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34701890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com