1:对于二维数组a[m][n];
记住a,a+1 , a+2 ,... a+m-1分别指向a的第0,1,2,...,m-1行,是代表行地址
a[0], a[1], a[2], ... a[m-1] 分别指向a的第0行第0列,第1行第0列,第二行第0列,。。。,是列地址。
*a,*(a+1), *(a+2), *(a+m-1) 同上
行地址加1,相当于地址加了一行所占的空间,列地址加1,相当于地址加了一个元素所占的空间。
行地址加*号,或者后加[], 就变成了列地址
列地址加&号,就变成了行地址
虽然他们的数值是相同的,但是所代表的含义不同。
我个人理解:
*,[]用来降维
&用来增维
2:对于二维数组传递函数参数
已经定义int a[m][n];
Int (*p)[n]; //这里p的含义是指向一个一维数组,该一维数组拥有n的元素。
p=a; // 将a的首行地址赋值给p
函数定义
void function(int (*(poit)[n], int)
{
Point[x][y]=1;
*(*(Point+x)+y)=1; // point+x为第x-1行的行地址,
// *(point+x)为第x-1行第0列的地址,
// (*(Point+x)+y) 为第x-1行第y-1列的地址
//上面两者等效。
}
Function(a,i)//函数调用
对于int * p[m], 含义与上不同,它表示m个指针变量,每个指针变量存放了int类型的地址(指针)。