C语言 不使用指针相互分配地址

5vf7fwbs  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(119)

我写了这个随机代码等待某种错误,但它以一种奇怪的方式工作,我无法理解。

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。

weylhg0b

weylhg0b1#

main使用以下命令调用f

f(&i,&j);

所以在f中,p的值为&iq的值为&j,然后:

p=q;

这会将q的值复制到p,因此现在pq都具有值&j
最后,它做到了:

*p=2;

由于p的值为&j,因此j设置为2。它等效于*(&j) = 2;,即j = 2;
返回到main时,i的值不变,所以它仍然是0,而j的值是2,所以它打印0 2

相关问题