求问大神,指针为什么&(*(a+1)+2)出错,&*(a+i)表示第i行首地址,为什么加了列以后却报错

2024-12-26 09:40:51
推荐回答(2个)
回答1:

前提是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));

上面的表达式都是没有问题的;

回答2:

因为*(a+1)+2的结果是一个常量,不能再用地址去指向。