如果我没看错,int[][10]
是没有第一维的二维数组类型。当用作函数参数类型时,这应该衰减为 int(*)[10]
指针。
我有两个问题:
为什么这在本地范围内失败
int a[][10];
与
error: definition of variable with array type needs an explicit size or an initializer
p2指向的内存区的维度是多少
auto p2 = std::make_unique<int[][10]>(2);
?
最佳答案
•what is the dimension of the memory area pointed by p2
p2指向的内存区域是线性的。:)
但是它表示一个int[2][10]
当您声明一个数组时,您必须指定它的大小,这样编译器才能确定要分配的内存大小,并在编译时确定对象的类型。
对于这个声明如果不是隐式转换为指向数组首元素的指针的函数参数的声明
int a[][10];
a 的类型不完整。编译器不知道 a 的确切类型。所以它会报错。
这个声明的区别
auto p2 = std::make_unique<int[][10]>(2);
还有这个
int a[][10];
在第一种情况下,数组是在运行时动态定义的,而在第二种情况下,数组是在编译时定义的,编译器必须在运行程序之前知道它的类型。
关于c++ - 分配没有一维的多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31624477/