在c语言或者c++中是不支持在定义时使用变量的(不考虑新特性)。
对于二维数组的定义方式:
int a[][5] = {1,2,3}; int a[1][2] = {1,2,3};
是可以省略行号不仅可以省略列号的,因为省略行号编译器可以自己得到对应的行列,都省略的话编译器是不知道的。
函数传参数时,就相当于定义变量,所以也类似:
#include <iostream>
#include <Windows.h>
/*版本1: 二维数组的行数和列数都指明*/
void test(int a[3][4])
{
}
/*版本2: 二维数组的函数可以省略(但是只能省略行数),然后传入一个行数*/
void test1(int a[][4], int row)
{
}
int main(void)
{
int a[3][4] = { 0 };
test(a);
test(a, 3);
system("pause");
return 0;
}
二维数组作为函数参数进行传递的时候有三种方式
1)void func(int *a,int row,int col); -- 建议使用 // 直接以对应类型的指针传递,这种不能使用两个下标运算符访问数据
注意: 这样我们在调用函数的时候,第一个参数应该传递的是二维数组第一个数据的地址,而不是二维数组名。
int arr[5][5]; // 假设此处定义的是二维数组。
func(&arr[0][0],5,5); // 调用函数,第一个参数必须这样传递,因为我们这样操作完全是利用二维数组空间连续的性质。
2) void func(int *a[10],int row);
3) void func(int a[] [10],int row);