1.列表法
int b[n][m]的第一个元素地址为&b[0][0]:
声明 int *p;
p=&b[0][0];
*(p+1) 等于b[0][1]
*(p+i*m+j)就是b[i][j]
p每次加1,指向下一列的元素,这时p称为列指针。
2.行地址法
对二维数组int b[10][20] 每行看做一个整体,每个元素看做一行的一维数组
b是这个一维数组的名字,B[i]就是这个一维数组的第i个元素
b是这个一维数组的首地址,b+i就是第i个元素的地址
b[i]实际上是一行元素。它是这一行元素的名称,就是这一行元素的首地址
*(*(b+i)+j)与b[i][j]、*(b+i)[j]相同
与b对应的指针的声明为 int (*p)[20];
*(*(b+i)+j)=(i+1)*(j+1);
这样声明指针变量,复制p=b,开始p是第0行地址,p+1就是第一行的地址。p称为行地址。
2.二维数组的指针作为函数的参数
int b[n][m]
int *p 实参应该为&b[0][0]
访问 *(p+M*i+j)
int(*p)[M] 实参为B或&B[0],函数中访问元素的基本方式*(*(p+i)+j)