前言:
二维数组是个数组指针。
1、用指针数组表示二维数组
char ch[2][3] = {"aa","bb"};
char *p[2];
int i;
for(i=0;i<2;i++)
{
p[i] = ch[i];
}
当实参为指针数组时char *p[M];
foo(p);------------------>即先将二维数组对应好指针数组后,再直接传递指针数组的数组名就行了。
对应的函数形参可以为:
foo(char *q[M]);
foo(char **q);
foo(char *q[]);
2、用数组指针表示二维数组
char ch[2][3] = {"aa","bb"};
char (*p)[3];
p = ch;
当实参为二维数组时,char ch[M][N]
foo(ch);---------------->除了方法一中,通过传递指针数组的数组名方法外,还可以直接传递二维数组名。
对应的函数形参可以为:
foo(char q[M][N] );
foo(char (*q)[N]);
foo(char q[][N]);
注意:即便foo函数中的形参形式是二维数组(q[M][N] 或者q[][N]), 实际也只是为形参开辟一个数组指针的空间,而不是开辟存放二维数组的储存单元。