【发布时间】:2019-10-30 22:41:58
【问题描述】:
#include <stdio.h>
int main(void){
int a=1,b=2,c=3; int *p,*q,**r; p=&a;
r=&q;
q=&c;
a=*q+**r;
printf("x=%d y=%d z=%d\n",**r,*p,*q);
*r=p;
a=*q+**r;
printf("w=%d\n",a);
return 0;
}
输出:
x=3 y=6 z=3
w=12
我能够正确预测输出,但我不确定我是否对 z 的输出有正确的解释。
请看我的理解是否正确:
- 就在
*r=p;执行之前,我们有a=6,b=2,c=3。 -
*r=p;执行时,r指向的地方的值变为p。 - 现在
r指向地址为c的q,所以现在q的地址为a,因为p指向a。所以q现在指向a。所以*q给出 6。 - 因为
r仍然指向q,而q指向a,所以**r给出6。 - 所以
*q + **r = 6+6=12
这是正确的解释吗?
【问题讨论】:
标签: c double-pointer