【发布时间】:2020-07-20 07:07:35
【问题描述】:
在这个动态多维数组的声明中,[4] 的重复究竟做了什么?
int (*array)[4] = new int[10][4];
【问题讨论】:
标签: c++ pointers multidimensional-array dynamic
在这个动态多维数组的声明中,[4] 的重复究竟做了什么?
int (*array)[4] = new int[10][4];
【问题讨论】:
标签: c++ pointers multidimensional-array dynamic
如果你有这样的数组
T a[10];
那么T就是数组元素的类型。
要动态分配这样一个数组,你必须编写
T *array = new T[10];
现在让我们通过以下方式将T 定义为 typedef 名称
typedef int T[4];
或
using T = int[4];
所以这个声明
T *array = new T[10];
对于这个 typedef 也是有效的。
现在让我们用相反的方式用 T 代替它的 typedef 定义。我们会得到
int ( *array )[4] = int[10][4];
因此操作符 new 分配了一个包含 10 个“行”的二维数组,每行又是一个包含 4 个整数元素的数组。
这条记录
int ( *array )[4]
表示指向由 4 个元素组成的数组(二维数组的元素)的指针。
为了更清楚,让我们有一个类似的数组
T a[N1][N2];
这个二维数组的声明你可以重写
T ( a[N1] )[N2];
这两个声明都声明了相同的二维数组。
要获得指向数组元素类型的指针,只需将记录 ( a[N1] ) 替换为 ( *p ) 。例如
T ( a[N1] )[N2];
T ( *p ){N2] = a;
【讨论】: