pa是已经指向a[1][0]的指针,所以要最终要取得a[1][2][2]的值,应该是取得指针&a[1][2][2] 而指针&a[1][2][2]在指针数组a[1][2]中 所以首先让指针pa+2,取结果*(pa+2)则指针指向指针数组a[1][2]首地址了; 然后再从指针数组中取值,*(pa+2)+2表明指针指向地址&a[1][2][2]; 所以要取得a[1][2][2]的值结果应该是*((pa+2)+2) char (*ppa)[3][2] = &a[1]; ppa是指向指针数组a[1]的指针,所以最终要取得a[1][2][2]的值,需要一层层获取指针指向的地址和值; &a[1][2][2]存放在指针数组a[1][2]中,&a[1][2]存放在指针数组a[1]中,所以目前ppa已经指向了&a[1],那么*ppa就获得了a[1]数组中的首地址了,即指向了&a[1][0],要指向&a[1][2],那么(*ppa)+2就已经指向了a[1][2]指针数组首地址了;再指向&a[1][2][2],取得*(*ppa+2)+2,最后要取得该指针中的数值:*(*(*ppa+2)+2)
pa是已经指向a[1][0]的指针,所以要最终要取得a[1][2][1]的值,应该是取得指针&a[1][2][1] 而指针&a[1][2][1]在指针数组a[1][2]中 所以首先让指针pa+2,取结果*(pa+2)则指针指向指针数组a[1][2]首地址了; 然后再从指针数组中取值,*(pa+2)+1表明指针指向地址&a[1][2][1]; 所以要取得a[1][2][1]的值结果应该是*(*(pa+2)+1) 也可以写成(*(pa+2))[1] char (*ppa)[3][2] = &a[1]; ppa是指向指针数组a[1]的指针,所以最终要取得a[1][2][1]的值,需要一层层获取指针指向的地址和值; &a[1][2][1]存放在指针数组a[1][2]中,&a[1][2]存放在指针数组a[1]中, 所以目前ppa已经指向了&a[1],那么*ppa就获得了a[1]数组中的首地址 了,即指向了&a[1][0],要指向&a[1][2],那么 (*ppa)+2就已经指向了a[1][2]指针数组首地址 了;再指向&a[1][2][1],取得*(*ppa+2)+1,最后 要取得该指针中的数值:*(*(*ppa+2)+1) 也可以写成(*ppa)[2][1]
printf("%c\n%c\n", (*(pa + 5))[1], (*(ppa + 1))[2][1]); 要注意别忘了指针前面的括号( 和[]前面的)。。。。。
pa为一个指向具有两个元素的数组的指针,赋值&a[1][0]后指向{'g','h'},所以pa[5]=={'q','r'}, pa[5] [1]=='r'; 同理ppa指向{{'g','h'},{'i','j'},{'k','l'}},ppa[1]=={{'m','n'}, {'o','p'},{'q','r'}}, ppa[1][2]=={'q','r'},ppa[1][2][1]=='r';
如果说 char (*pppa)[3][2] = a; 那么结果为ppa[2][2][1];
printf("%c\n", *(*(pa+5)+1)); printf("%c\n", *(*(*(ppa+1)+2)+1));
#include <stdio.h> int main(void) { ..... pa=&a[2][2]; ppa=&a[2]; printf("%c,%c\n",(*pa)[1],(*ppa)[2][1]); }
两种写法: 1.pa[5][1]和ppa[1][2][1] 2.*(*(pa+5)+1)和*(*(*(ppa+1)+2)+1)
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!