如果你有类型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
是int [M]
可以写
int (*a)[M] = new int [N][M];
即此语句分配类型int[M]
的N
元件和指针a
的阵列获取所分配的阵列的第一个元素的地址等效TP。
返回到你的程序示例
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
元素(对象)的数组而a
是指针到分配数组的第一个元素。
您的第一段的最后一项是错误的。 'a'被声明为一个指向数组5'int'的指针; *而已*。它没有指向任何东西*(还)。这就是'new []'的用途。 – WhozCraig
二维数组是指向指向数组的指针,每个指向另一个数组(在您的情况下为整数)。 – Ripi2
你忘记了'int r = 5'后的分号。 – NonCreature0714