在这段代码中,为什么 firstvalue 的值确实是 20

In This code why does the value of firstvalue does came out as 20

在这段代码中,为什么firstvalue的值不是20。最后我将指针p1的值更改为20。所以p1应该将firstvalue地址的值赋给20。

// more pointers
#include <iostream>
using namespace std;
int main ()
{
int firstvalue = 5, secondvalue = 15;
int * p1, * p2;
p1 = &firstvalue;  // p1 = address of firstvalue
p2 = &secondvalue; // p2 = address of secondvalue
*p1 = 10;          // value pointed to by p1 = 10
*p2 = *p1;         // value pointed to by p2 = value pointed by p1
p1 = p2;           // p1 = p2 (value of pointer is copied)
*p1 = 20;          // value pointed by p1 = 20

cout << "firstvalue is " << firstvalue << '\n';
cout << "secondvalue is " << secondvalue << '\n';
return 0;
}

因为 p1 = p2 重新分配 p1 以指向 secondvalue

这是最终架构:

 +--+      +---+
 |p1|      | p2|
 +--+      +---+
    |        |  
    --       |
      \      v 
       +-----------+
       |secondValue|
       +-----------+
            20

secondValue 是 20,因为您正在更改 p1 中显示的值,它指向 secondValue.

当你分配p1=p2时,你将p2指向的地址分配给p1。现在 p1 和 p2 都指向 secondValue。这不会改变 firstValue。