int arr[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p1=&arr[2][2];
int *p2=arr[2]+2;
int *p3=*(arr+2)+2;
int (*p4)[3]=&arr[2];
int (*p5)[3]=arr+2;
int (*p6)[3]=arr; //二维数组名本身即是指向二维数组中第一个一维数组的指针
int (*p7)[4][3]=&arr; //arr与&arr的值一样 但指针类型不同
int (*p8[3])= {arr[2]}; //类型是指向一个int类型变量的指针
printf("p1=%d\np2=%d\np3=%d\np4=%d\np5=%d\np6=%d\np7=%d\np8=%d\np8=%d\n",
*p1, //*&arr[2][2] ==arr[2][2]
*p2, //*(arr[2]+2) ==arr[2][2]
*p3, //*(*(arr+2)+2) ==arr[2][2]
p4[0][2], //(&arr[2])[0][2]==(*&arr[2]+0)[2] ==arr[2][2]
p5[0][2], //(arr+2)[0][2] ==arr[2][2]
p6[2][2], //arr[2][2] ==arr[2][2]
p7[0][2][2],//&arr[0][2][2] ==arr[2][2]
p8[2], //错误用法 p8本身是个数组 先要访问p8中存放的指针
p8[0][2]); //p8[0][2] ==arr[2][2]
二维数组的指针访问记录
最新推荐文章于 2022-07-26 10:42:47 发布