我写了这个随机代码等待某种错误,但它以一种奇怪的方式工作,我无法理解。
void f(int *p,int *q){ p=q; *p=2; } int i=0,j=1; int main(){ f(&i,&j); printf("%d %d",i,j); }
我不明白的不是p和q,i和j的地址,它们不是指针,我可以在其中存储地址,所以为什么它们会相互影响,当我认为i值是2时,我很惊讶,它仍然是0,而j值变成了2。
weylhg0b1#
main使用以下命令调用f:
main
f
f(&i,&j);
所以在f中,p的值为&i,q的值为&j,然后:
p
&i
q
&j
p=q;
这会将q的值复制到p,因此现在p和q都具有值&j。最后,它做到了:
*p=2;
由于p的值为&j,因此j设置为2。它等效于*(&j) = 2;,即j = 2;。返回到main时,i的值不变,所以它仍然是0,而j的值是2,所以它打印0 2。
j
*(&j) = 2;
j = 2;
i
0
2
0 2
1条答案
按热度按时间weylhg0b1#
main
使用以下命令调用f
:所以在
f
中,p
的值为&i
,q
的值为&j
,然后:这会将
q
的值复制到p
,因此现在p
和q
都具有值&j
。最后,它做到了:
由于
p
的值为&j
,因此j
设置为2。它等效于*(&j) = 2;
,即j = 2;
。返回到
main
时,i
的值不变,所以它仍然是0
,而j
的值是2
,所以它打印0 2
。