详细解释在这里:(我只分享,摘录我所欠缺的知识)
括号中的*表明 p
是一个指针,它指向一个数组,数组的类型为int [N]
,这正是 a
所包含的每个一维数组的类型。
[ ]
的优先级高于*
,( )是必须要加的,如果赤裸裸地写作int *p[4]
,那么应该理解为int *(p[4])
,p
就成了一个指针数组,而不是二维数组指针了。
//M,N 为定义的常数
//不够的地方补零
// 二维数组的定义形式
a[M][N]={ {1,2,3,4,5},
{1,1,1,1,1},
{1,58,5,98},
};
// 对二维数组的调用形式
int (*p) [N]=a;
// 对二维数组的调用形式
int p[][N]=a;
eg:(实际验证过哦~)
void fun (int (*s)[10], int *b, int *n,int mm, int nn)
{
int i,j;
for(j=0;j<nn;j++)
{
for(i=0;i<mm;i++)
{
b[*n]=*(*(s+i)+i);
//b[*n]=s[i][j]; //他俩是等价的
*n+=1;
}
}
}
运行结果: