您只需要:
void proc_ref(int (&matrix)[10][10]);
void proc_ptr(int (*matrix)[10], int n);
在第一种情况下,
matrix
将是一个指向包含 10 个数组的数组的引用,每个数组都包含 10 个整数(“指向
int[10][10]
的引用”);在第二种情况下,
matrix
将是指向包含 10 个
int
的数组的指针(“指向
int[10]
的指针”)。
在这两种情况下,您都可以像想要的那样在 proc
中使用它:
matrix[i][j] = 42;
第二个版本允许传递各种大小的矩阵,例如
int[14][10]
或
int[12][10]
(只要第二维大小为10)。它还允许传递动态分配的10个
int
数组的数组。
int (*p)[10] = new int[42][10];
proc_ref (p);
proc_ptr (p, 42);
int m[24][10];
proc_ref (p);
proc_ptr (p, 24);
如果您只允许自动存储期声明的正方形矩阵,请使用引用版本。
注意: 您必须在编译时指定矩阵的第二维。如果您想要实现“通用性”,可以使用模板:
template <size_t N>
void proc (int (&matrix)[N][N]);
此外,如果您正在使用c++11,应该使用
std::array
,它更加方便,同时仍然可以做到您想要的(无需动态分配):
template <typename T, size_t N>
using matrix_t = std::array<std::array<T, N>, N>;
template <typename T, size_t N>
void proc (matrix_t<T, N> &matrix) {
matrix[N - 1][N - 1] = 7;
}
int main () {
matrix_t<int, 10> matrix;
proc(matrix);
}
int (&matrix)[10][10]
。 - Angew is no longer proud of SO