【问题标题】:A small question about structure of dynamic multidimensional array in C++C++中关于动态多维数组结构的一个小问题
【发布时间】:2020-07-20 07:07:35
【问题描述】:

在这个动态多维数组的声明中,[4] 的重复究竟做了什么?

int (*array)[4] = new int[10][4];

【问题讨论】:

    标签: c++ pointers multidimensional-array dynamic


    【解决方案1】:

    如果你有这样的数组

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2020-05-10
      • 2017-04-13
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      相关资源
      最近更新 更多