c++ - 分配没有一维的多维数组

标签 c++ arrays multidimensional-array

如果我没看错,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/

相关文章:

PHP - 如何创建递归函数?

c# - 将返回类型转换为数组 C#

c - 如何将三维动态字符数组写入和读取到文件?

c++ - 如何销毁由 std::thread 显式创建的线程?

c++ - 如何为C++设置多个数据类型?

c++ - main(int argc, char* argv[]) 不明白

php - 在多维数组中查找最大值

c++ - 具有不同类型的通用接口(interface)

c++ - 在数组中搜索字符串

python - 如何用掩码和索引替换双 for 循环?