如何使用 new 声明二维数组?
就像,对于“正常”数组,我会:
int* ary = new int[Size]
但
int** ary = new int[sizeY][sizeX]
a) 不工作/编译和 b) 不完成什么:
int ary[sizeY][sizeX]
做。
原文由 user20844 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何使用 new 声明二维数组?
就像,对于“正常”数组,我会:
int* ary = new int[Size]
但
int** ary = new int[sizeY][sizeX]
a) 不工作/编译和 b) 不完成什么:
int ary[sizeY][sizeX]
做。
原文由 user20844 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
如果您的行长是编译时间常数,C++11 允许
看到 这个答案。像 gcc 这样允许可变长度数组作为 C++ 扩展的编译器可以使用
new
如此处所示, 以获得 C99 允许的完全运行时可变数组维度功能,但可移植 ISO C++ 仅限于第一个维度是可变的。另一个有效的选择是手动将 2d 索引到一个大的 1d 数组中,正如 另一个答案所示,允许与真正的 2D 数组相同的编译器优化(例如,证明或检查数组不会相互别名/重叠)。
否则,您可以使用指向数组的 指针数组 来允许 2D 语法,如连续的 2D 数组,即使它不是有效的单个大分配。您可以使用循环对其进行初始化,如下所示:
以上,对于
colCount= 5
和rowCount = 4
,将产生以下内容:在删除指针数组之前,不要忘记
delete
每一行分别用一个循环。 另一个答案 中的示例。