在这段代码中,为什么 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。
在这段代码中,为什么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。