答案是使用指针或引用传递二维数组。常见方法包括:1. 指定列数的二维数组参数,如void processArray(int arr[][3], int rows);2. 使用指向数组的指针,如void processArray(int (*arr)[3], int rows);3. 使用模板配合引用传递,保持数组维度信息;4. 用二级指针传动态二维数组,需配合行和列参数。

在c++中,向函数传递二维数组有几种常见方式。由于数组不能直接复制,必须通过指针或引用传递。下面介绍几种实用的方法,帮助你正确地把二维数组传给函数。
1. 使用固定列数的二维数组参数
如果二维数组的列数是固定的,可以在函数参数中明确指定列的大小。这是最简单直接的方式。
void processArray(int arr[][3], int rows) {
for (int i = 0; i
for (int j = 0; j
std::cout
}
std::cout
}
}
调用时:
int data[2][3] = {{1, 2, 3}, {4, 5, 6}};
processArray(data, 2);
注意:必须指定列数(这里是3),但可以省略行数。
立即学习“C++免费学习笔记(深入)”;
2. 使用指向数组的指针
可以把参数声明为指向含有N个元素的整型数组的指针,效果和上面类似。
void processArray(int (*arr)[3], int rows) {
// 和上面一样访问 arr[i][j]
}
这种写法更明确地表示传入的是一个指向数组的指针,调用方式不变。
3. 使用动态分配的二维数组(指针的指针)
如果使用new动态创建的二维数组,需要用int**作为参数类型。
void processDynamicArray(int** arr, int rows, int cols) {
for (int i = 0; i
for (int j = 0; j
std::cout
}
std::cout
}
}
分配方式示例:
int** data = new int*[2];
for (int i = 0; i
data[i] = new int[3];
记得用完后释放内存。
4. 使用std::vector(推荐现代C++做法)
更安全、灵活的方式是使用std::vector<std::vector<int>>。
void processVector(const std::vector<std::vector<int>>& matrix) {
for (const auto& row : matrix) {
for (int val : row)
std::cout
std::cout
}
}
调用:
std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}};
processVector(matrix);
这种方式没有大小限制,自动管理内存,不易出错。
基本上就这些常用方法。小项目可用固定列数的数组,大项目建议用vector。关键是根据数组的定义方式选择对应的参数形式。


