如果我猜对了,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];
,在第一种情况下,数组是在运行时动态定义的,在第二种情况下,数组是在编译时定义的,编译器必须在运行程序之前知道它的类型。