前提是a是一个二维数组吧
a+i 表示的是表示第i行首地址,
*(a+i)表示第i行首元素的地址
在 &*(a+i) 也就是 &(* (a+i) ) 中,&和* 相当于相互抵消了。
而 &(*(a+1)+2)出错,是因为这个类推并不对应。要对应的话,见下图
int i=1,j,x,y,z,w;
char a[3][80], *p,(*pp)[80];
pp = a+i;
pp = &(*(a+i));
p = *(a+1)+2;
p = &(*(*(a+1)+2));
上面的表达式都是没有问题的;
因为*(a+1)+2的结果是一个常量,不能再用地址去指向。