0

我大致了解了指针的逻辑,但对我来说有一个不清楚的点与底层代码有关。

#include <iostream>
using namespace std;

int main ()
{
int first = 50, 
second = 150;
int * p1, * p2;

p1 = &first;         //p1 is assigned to the address of first
p2 = &second;        //p2 is assigned to the address of second
*p1 = 100;           //first's value is changed as 100 by assigning p1's value to 100
*p2 = *p1;           //now p2's value should be 100 
p1 = p2;             //I think we want to change p1's adress as p2
*p1 = 200;           //I expect that the new value of p1 should be 200

cout << first << second;

return 0;
}

程序打印 first=100 和 second=200,但正如我上面评论的,我希望 p1 的值更改为 200。但它仍然保持为 100。那有什么意义?

4

4 回答 4

7

您似乎将指针值与指针指向的值混淆了。

*p1 = 200;           //I expect that the new value of p1 should be 200

p1是一个指针,所以它的值实际上是一个内存位置,即first. (类似于 0xDEADBEAF)。在这一行之后:

p1 = p2;

p1左指向 的内存位置second,所以在做的时候

*p1 = 200;

它实际上设置second200

于 2011-11-07T22:40:00.030 回答
3

代码中的指针及其值如何变化

于 2011-11-08T00:21:00.210 回答
1

p1 = p2使p1指针指向指向的 int p2。现在p1指向second。因此,在该指令之后,所有修改*p1都会影响 的值*p2,因此也是second

于 2011-11-07T22:40:56.497 回答
0

您将值 100 分配给存储在 p1 中的地址位置,这很好。然后您将此值移动到 p2。但是接下来您再次分配 p1 = p2,这使得存储在 p2 中的地址被移动到 p1,从而导致了麻烦。注释此行,您的代码将按预期工作。

于 2015-07-20T23:52:07.933 回答