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