以一道题为例
若有声明int a[][3]={2,4,6,8,10,12},b,c,*p1,(*p2)[3]=a+1;执行语句p1=*p2-2;b=p1[1];c=p2[1][-2];后,变量b的值____,c的值____。
解析:
首先可以知道a这个数组形如
{2,4,6
8,10,12}。
p2指向a[1]这行——也就是8开头的这一行。
p1=*p2-2——*p2指向p2的第0列也就是8,再-2就会到4。(当指针指向列也就是某个数时,加减就变成数的位置的偏移)
b=p1[1]——p1[1]~~p1+1——也就是6
c=p2[1][-2]~~*((*p2+1)-2)——首先是指向p2下一行的位置即8这行的下行(虽然a这个数组没有定义下一行,但是存在这个行并且行地址不可测),再-2是在指向8下行的第0列这个基础上再-2(同上,变成数的位置的偏移)——指向10