如何使用 new 在 C 中声明二维数组?

新手上路,请多包涵

如何使用 new 声明二维数组?

就像,对于“正常”数组,我会:

 int* ary = new int[Size]

int** ary = new int[sizeY][sizeX]

a) 不工作/编译和 b) 不完成什么:

 int ary[sizeY][sizeX]

做。

原文由 user20844 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 675
2 个回答

如果您的行长是编译时间常数,C++11 允许

auto arr2d = new int [nrows][CONSTANT];

看到 这个答案。像 gcc 这样允许可变长度数组作为 C++ 扩展的编译器可以使用 new 如此处所示, 以获得 C99 允许的完全运行时可变数组维度功能,但可移植 ISO C++ 仅限于第一个维度是可变的。

另一个有效的选择是手动将 2d 索引到一个大的 1d 数组中,正如 另一个答案所示,允许与真正的 2D 数组相同的编译器优化(例如,证明或检查数组不会相互别名/重叠)。


否则,您可以使用指向数组的 指针数组 来允许 2D 语法,如连续的 2D 数组,即使它不是有效的单个大分配。您可以使用循环对其进行初始化,如下所示:

 int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
    a[i] = new int[colCount];

以上,对于 colCount= 5rowCount = 4 ,将产生以下内容:

在此处输入图像描述

在删除指针数组之前,不要忘记 delete 每一行分别用一个循环。 另一个答案 中的示例。

原文由 mmx 发布,翻译遵循 CC BY-SA 4.0 许可协议

int **arr = new int* [NoOfRows]
for(int i = 0; i<NoOfRows; i++)
   arr[i] = new int[noOfColumn];

这是使用 new 在 C++ 中声明 2D 数组的好方法 这里 NoOfRow 显示您想要多少行,而 noOfColumn 显示您想要多少列

原文由 Vivek Rai 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题