如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,行数可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。
所以如果定义一个函数,参数二维数组,那么至少要指定列数,比如:
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;
}
你有一个二维数组a[8][8],你想对这64组数进行处理,均-1.
用函数怎么实现?
实参a[0][0],a[0][1],a[0][2].......88个实参?形参也是88个?只改了形参,实参没影响?
这时,只需要把二维数组的首地址指针当作参数,函数中形参指针一项项移动是不是很好?