#include <stdio.h> void print2(int (*p)[5], int x, int y); //数组与指针的相互表示 int main() { int arr[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}}; print2(arr,3,5);//arr是首元素地址,即{1,2,3,4,5}的这个一维数组的地址 // //主函数内输出 // int* pa = arr; // int i = 0; // for (i = 0;i < 3;i++) // { // int j = 0; // for (j = 0; j < 5; j++) // { // //方法一: // //pa + i代表行数 // //(pa + i)[j]代表i行的j列元素 // //printf("%d ", (pa + i)[j]); // //方法二: // //printf("%d ",arr[i][j]); // //方法三: // //pa + i代表行数 // //*(pa+i)代表i行的首地址的内容 // //*(pa+i)+j代表i行j列的元素 // //printf("%d ",*(pa+i)+j); // //方法四: // //pa[i]代表以i行为起始地址的内容 // //pa[i]+j代表以i行为起始地址访问j列元素内容 // printf("%d ",pa[i]+j); // //综上 (pa + i) == arr[i] == *(pa+i) == pa[i] 都指向同一地址 // } // printf("\n"); // } return 0; } void print2(int (*p)[5], int x, int y) //arr是二位数组的首元素是{1,2,3,4,5}的地址即(*p)[5] { int i = 0; for(i = 0;i < x;i++) { int j = 0; for (j = 0;j < y;j++) { //方法一: //p+i代表行数 //*(p+i)代表一行的首地址 //*(p+i)+j代表一行的每个元素的地址 //*(*(p+i)+j)代表一行一个元素地址的解引用,即地址的存放内容 //printf("%d ",*(*(p+i)+j)); //方法二: //p+i代表行数 //*(p+i)代表一行的首地址 //(*(p+i))代表一行的全部地址 //(*(p+i))[j]代表一行的某个元素 //printf("%d ",(*(p+i))[j]); //方法三: //从主函数得出结论(pa + i) == arr[i] == *(pa+i) == pa[i] 都指向同一地址 //所以可将方法二中(*(p+i))替换为p[i] printf("%d ",p[i][j]); } printf("\n"); } }
10-17
258
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-10