gpt4 book ai didi

c++ - 了解具有动态内存分配的二维数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:57 25 4
gpt4 key购买 nike

谁能帮我理解这段代码的最后一行?我不明白它是如何动态分配二维数组的。我知道在第 6 行,它创建了一个名为“a”的指针,并将其指向由“c”定义的大小为 5 的整数数组。

我不明白的是“new int”语句是如何与等式中的 r 一起工作的。提前致谢。

#include <iostream>
const int c = 5; //num of columns

int main () {
int r = 5;
int (*a)[c];
a = new int[r][c]; // allocate array
}

最佳答案

如果你有一个类型 T 并且要分配一个大小为 N 的数组,那么这个表达式

new T[N]

返回分配数组的第一个元素的 T * 类型的地址。

所以你应该写

T *a = new T[N]; 

例如,如果 T 等价于 int 类型

typedef int T;

using T = int;

那么上面的分配就可以写成

int *a = new int[N];

数组元素的大小等于sizeof( int ),通常为4字节。

现在假设您要分配一个类型为 int[M] 的元素数组,其中 M 是一个常量整数表达式。

你可以写

typedef int T[M];

using T = int[M];

T *a = new T[N];

因此您分配了一个包含 N 元素的数组,其中每个元素的大小为 sizeof( int[M] 并且指针 a 指向数组的第一个元素。

因为 T 等价于 tp int [M] 你可以这样写

int ( *a )[M] = new int [N][M]; 

也就是说,这条语句分配了一个 N 元素的数组,类型为 int[M] 并且指针 a 获取了分配数组的第一个元素。

返回到您的程序示例

整数 r = 5 整数 (*a)[c]; a = 新整数[r][c];

你可以改写成下面的方式

typedef int T[c];

using T = int[c];

T *a = new T[r];

也就是说,这个语句分配了一个类型为int[c]r 元素(对象)数组,a 是指向第一个的指针分配数组的元素。

关于c++ - 了解具有动态内存分配的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266710/

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