谁能帮我理解这段代码的最后一行?我不明白它是如何动态分配二维数组的。我知道在第 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/