如果我得到了正确的结果,int[][10]
是没有第一维的二维数组类型。当用作函数参数类型时,这应该衰减为int(*)[10]
指针。
我有两个问题:
为什么在本地范围内失败
int a[][10];
带
错误:数组类型变量的定义需要显式大小或初始化程序
p2指向的内存区域的维度是什么
auto p2 = std::make_unique<int[][10]>(2);
答案 0 :(得分:0)
•p2
指向的内存区域的维数是多少
p2指向的内存区域是线性的。:)
但它代表了int[2][10]
声明数组时,必须指定其大小,以便编译器能够确定要分配的内存大小,并在编译时确定对象的类型。
对于此声明,如果它不是函数参数的声明,则隐式转换为指向数组第一个元素的指针
int a[][10];
a的类型是incompllete。编译器不知道a的确切类型。所以它发出错误。
此声明之间的区别
auto p2 = std::make_unique<int[][10]>(2);
和这一个
int a[][10];
在第一种情况下,数组是在运行时动态定义的,在第二种情况下,数组是在编译时定义的,编译器必须在运行程序之前知道它的类型。