何时指针赋值和按值赋值会产生相同的效果?

时间:2014-03-12 19:30:12

标签: c pointers

何时指针赋值和赋值会产生相同的效果?

例如,假设我有两个指向两个int的指针:

int a = 1, b = 2, *pa = &a, *pb = &b;

然后,如果我有

pa = pb;

,何时会产生相同的效果(即使*pa == *pb)为

a = b;

在什么情况下会导致问题和写作

a = b;

是否有必要制作*pa == *pb

3 个答案:

答案 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)