如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,行数可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。
所以如果定义一个函数,参数二维数组,那么至少要指定列数,比如:
void p (int a[2][3])//正确
void p (int a[][3])//正确
void p (int a[][])//错误
void p (int a[2][])//错误
那么如果你想要用指针来做参数传递二维数组,那你需要定义一个指向数组(大小等于二维数组列数)的指针,比如:
void p (int (*a)[3])//正确
注意:要加括号,如果写int *a[3],就只是一维指针数组。
我写了个简单案例:
#include
void p(char (*num)[4])
{
printf("%s\n",num[0]);
printf("%s\n",num[1]);
}
void p2(char num[][4])
{
printf("%s\n",num[0]);
printf("%s\n",num[1]);
}
int main()
{
char num[2][4]={"abc","efg"};
p(num);
p2(num);
return 0;
}