以下调用函数中均以 int a[3][4]; 为例说明
(1) 实参为数组元素地址,虚参为元素类型指针
(a) 调用函数:fun(*a,3*4); //*a也可为a[0] or &a[0][0]
{ p[i] or *(p+i) }
(b) 调用函数:fun(*a,3,4); //*a也可为a[0] or &a[0][0]
函数: fun(int *p,int m,int n) //*p也可为p[]
{ *(p+i*n+j) }
(2) 实参为数组名,虚参为指向行的指针
调用函数:fun(a,3); //a也可为&a[0]
函数: fun(int (*p)[4],int m) //(*p)[4]也可为p[][4]
{ p[i][j] or *(p[i]+j) or *(*(p+i)+j) }
(3) 实参、虚参都用指针数组
因为二维数组类型为 (*)[] ,指针数组类型为 *[],所以不能把二维数组直接传给指针数组。
调用函数:
函数: fun(int *p[],int m,int n) //*p[]也可为**p
{ p[i][j] or *(p[i]+j) or *(*(p+i)+j) }
(4) 使用模板编写通用性更强的函数
调用函数:fun<3,4>(a);
函数:template <int M,int N>
fun(int p[M][N])
{ p[i][j] }
(5) 实参为数组名,虚参数组的引用
调用函数: fun(a);
函数: template<int M,int N>
fun(int (&p)[M][N])
{ p[i][j] or *(p[i]+j) or *(*(p+i)+j) }