#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
指向地址为q
的{{1}},所以现在c
的地址为q
,因为a
指向{ {1}}。因此,p
现在指向a
。因此q
给出6。a
仍指向*q
,并且r
指向q
,因此q
给出6。a
这是正确的解释吗?
答案 0 :(得分:2)
让我们分解一下:
int a=1,b=2,c=3;
a = 1
b = 2
c = 3
int *p,*q,**r;
p --> ?
q --> ?
r --> ? --> ?
p=&a;
p --> a = 1
q --> ?
r --> ? --> ?
r=&q;
p --> a = 1
q --> ?
r --> q --> ?
q=&c;
p --> a = 1
q --> c = 3
r --> q --> c = 3
a=*q+**r;
有:
a = 3 + 3 = 6
printf("x=%d y=%d z=%d\n",**r,*p,*q);
打印:
x=3 y=6 z=3
*r=p;
。这是偷偷摸摸的:自*r == q
起,这更改了q
。这与执行q=p
相同。这样我们得到:
p --> a = 6
q --> a = 6
r --> q --> a = 6
a=*q+**r;
有:
a = 6 + 6 = 12
printf("w=%d\n",a);
打印:
w=12
结论:您的解释正确。
答案 1 :(得分:0)
是的。 * r = p会使项r指向q,指向与p相同的地址,即&a。 ** r与* q相同,* q是&a处的值为6。