#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
с адресом c
, поэтому теперь q
имеет адрес a
, поскольку p
точекдо a
. Так что q
теперь указывает на a
. Так что *q
дает 6. - Поскольку
r
все еще указывает на q
, а q
указывает на a
, **r
дает 6. - Так
*q + **r = 6+6=12
Это правильное объяснение?