二维数组作为函数的参数
最近发现对c++的二维数组的传参产生遗忘,写此文来回顾下二维数组作为函数参数形式的传递。
固定维度
先定义一个三行三列数组
int arr[3][3] = { {1,2},{2,3},{2,3} };
二维数组作为函数的参数,总体只有以下几种写法。函数的参数声明中必须指出数组的列数,与数组的行数没有太大的关系。
void test01(int (*array)[3]) {
cout << "(*array)[3]传参成功" << endl;
}
void test02(int array[3][3]) {
cout << "array[3][3]传参成功" << endl;
}
void test03(int array[][3]) {
cout << "array[][3]传参成功" << endl;
}
以下几种方式是不合法的
void test04(int array[][]){}
void test05(int array[3][]){}
注意,这种写法是相当于声明了一个数组,该数组包含着3个指向整型对象的指针
void test06(int *arr[3]){}
动态二维数组
void vla(int m,int n,int arr[m][n]){} //正确
void vla(int arr[m][n],int m,int n){} //错误
很奇怪,VS 2022社区版的编译器竟然不支持VLA。
vector的形式使用二维数组
对于不支持VLA的编译器完全可以用vector替代数组形式。如建立一个n行n列的布尔型二维数组变量
int n = 3;
vector < vector<bool>> putQ(n,vector<bool>(n,true));//设置初值为真