何时指针赋值和赋值会产生相同的效果?
例如,假设我有两个指向两个int
的指针:
int a = 1, b = 2, *pa = &a, *pb = &b;
然后,如果我有
pa = pb;
,何时会产生相同的效果(即使*pa == *pb
)为
a = b;
在什么情况下会导致问题和写作
a = b;
是否有必要制作*pa == *pb
?
答案 0 :(得分:2)
pa = pb
永远不会与a = b
产生同样的效果。第一个更改pa
指向的地址,使其现在等于&b
,*pa
等于b
。第二个分配会更改a
(以及*pa
)的值,但pa
将继续引用a
的地址,该地址尚未更改。< / p>
答案 1 :(得分:2)
pa = pb
仅影响通过变量pa
访问数据的代码。使用变量a
的任何代码都不受影响。仅仅因为一个曾经指向a
的特定指针不再指向它,就不会改变a
的任何内容。
pa = pb;
printf("a=%d, *pa=%d\n", a, *pa); // prints 1, 2
如果a
稍后发生变化,则不会影响通过pa
获得的值。
a = 3;
printf("a=%d, *pa=%d\n", a, *pa); // prints 3, 2
相反,如果b
发生变化,则不会影响a
中的值。
a = 3;
b = 4;
printf("a=%d, *pa=%d\n", a, *pa); // prints 3, 4
你所谓的“指针分配”实际上是一个指针的赋值。它对指针指向的东西没有任何作用。 分配给变量会更改该变量的值。分配给包含指向另一个变量的指针的变量会改变指针变量指向的内容,不多也不少。
答案 2 :(得分:0)