一个指向指针的指针的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 08:07:19
main(){
int a[10]={0,1,2,3,4,5,6,7,8,9},*p[10],**pp=p,i;
for(i=0;i<10;i++)p[i]=&a[9-i];printf("%d\n",*(*(pp+8)+6));
}
麻烦各位解释一下整个程序的计算过程,多谢
我算出来是8啊,可是用机器算出来是7

应该是7

这么看:
*p[10]中是存放的a[10]的逆序的数组成员的地址:
p[0]: a[9]的地址
p[1]: a[8]的地址
...
p[8]: a[1的地址
p[9]: a[0]的地址

**pp=p
所以*(*(pp+8)+6))这么看:
先从pp偏移8位,即从p[0]偏移8位,指向p[8](也就是a[1的地址),
再偏移6位,即从a[1的地址偏移6位,即指向a[7]的地址,
再取其中的内容,a[7]的内容为7

*(pp+8)相当于p[8]
p[8]=&a[9-8] 即&a[1]
&a[1]+6 = &a[7]
最后加个*取到a[7]了