有人可以帮我理解这段代码中的最后一行吗?我不明白如何动态分配2D数组.据我所知,在第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]类型元素的数组,而指针a获取分配数组的第一个元素的地址.
回到你的程序示例
int r = 5
int(* a)[c];
a = new int [r] [c];
你可以用以下方式重写它
typedef int T[c];
要么
using T = int[c];
和
T *a = new T[r];
也就是说,这个语句分配一个int [c]类型的r元素(对象)数组,并且是指向已分配数组的第一个元素的指针.