1. int a[3][4], (*p)[4];
2. p = a;
3. p+i == &b[i],
4. b[i] ==*(p + i),
5. b[i] + j == &b[i][j],
6. b[i][j] == *(*(p + i) + j)
这个我应该搞懂了
它不是一个完整的程序
int (*p)[4]是一个行指针
b只是一个临时的东西 把a[3][4]这个二维数组分成几个一维数组 每个一维数组名是b[0],b[1],b[2],都包含4个整型
p = a; //让p指向数组a的首地址
p+i == &b[i], //第i行的首地址,也就是第i个一维数组的首地址(每个元素是一个一维数组,对元素取址)
b[i] == *(p + i), //b[i] ==*(&b[i]),*&抵消,b[i]也是第i行的首地址(也可以这样理解,比如b[i][4],b[i]可以看作是数组名,也就是这个一维数组的地址)
b[i] + j == &b[i][j], //b[i][4]这个一维数组偏移j位,就是b[i][4]中第j个元素的地址也就是&b[i][j]
b[i][j] == *(*(p + i) + j) //全部替换一下 再取值 得出b[i][j]的值,也就是a[3][4]这个二维数组第i行第j列的值
楼上int (*p)[4]等价于int p[4];是不可能的吧 前边是数组指针后边是数组啊