分配没有一个维度的多维数组

时间:2015-07-25 08:20:41

标签: c++ arrays multidimensional-array

如果我得到了正确的结果,int[][10]是没有第一维的二维数组类型。当用作函数参数类型时,这应该衰减为int(*)[10]指针。

我有两个问题:

  • 为什么在本地范围内失败

    int a[][10];
    

  

错误:数组类型变量的定义需要显式大小或初始化程序

  • p2指向的内存区域的维度是什么

    auto p2 = std::make_unique<int[][10]>(2);
    

1 个答案:

答案 0 :(得分:0)

  

•p2

指向的内存区域的维数是多少

p2指向的内存区域是线性的。:) 但它代表了int[2][10]

类型的二维数组

声明数组时,必须指定其大小,以便编译器能够确定要分配的内存大小,并在编译时确定对象的类型。

对于此声明,如果它不是函数参数的声明,则隐式转换为指向数组第一个元素的指针

int a[][10];

a的类型是incompllete。编译器不知道a的确切类型。所以它发出错误。

此声明之间的区别

auto p2 = std::make_unique<int[][10]>(2);

和这一个

int a[][10];

在第一种情况下,数组是在运行时动态定义的,在第二种情况下,数组是在编译时定义的,编译器必须在运行程序之前知道它的类型。