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



如果我猜对了,int[][10]是一个没有第一维的二维数组类型。当用作函数实参类型时,它应该衰变为int(*)[10]指针。

我有两个问题:

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

    int a[][10];
    

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

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

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

?

•p2

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

p2指向的内存区域是线性的。:)但它表示一个二维数组,类型为int[2][10]

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

对于非隐式转换为指向数组第一个元素的指针的函数形参的声明

int a[][10];

a的类型不完整。编译器不知道a的确切类型,因此发出错误。

声明

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

和这个

int a[][10];

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

相关内容

  • 没有找到相关文章

最新更新