因此,我对指针的概念还不熟悉,我对下面的示例代码有一个问题。
#include <iostream>
using namespace std;
int main()
{
int value1 = 5, value2 =15;
int * p1, * p2;
p1 = &value1;
p2 = &value2;
*p1 = 10;
*p2 = *p1;
cout << "value1 is " << value1 << "\n";
cout << "value2 is " << value2 << "\n";
p1 = p2;
*p1 = 20;
cout << "value1 is " << value1 << "\n";
cout << "value2 is " << value2 << "\n";
return 0;
}输出:
value1 is 10
value2 is 10
value1 is 10
value2 is 20我不明白为什么value1和value2的新值都不是20。
p1 = &value1;
p2 = &value2;
*p1 = 10;
*p2 = *p1; 在这里,它是有意义的。我相信我们已经将p1和p2分配给了value1和value2的地址,然后我们给p1分配了一个可以访问value1地址的值,使得value1 = 10,因为我们设置了p2 = p1,所以对于value2也会发生同样的事情。因此,两个值都等于10。
p1 = p2;
*p1 = 20;我们设置p1 = p2;然后将*p1的值设为20,但在终端中只输出value2的值为20,这应该分配给p2。为什么这之后value1不等于20,为什么只有value2等于20?
发布于 2020-03-13 03:02:30
这是因为您只将20赋值给value2
p1 = p2; // from here both p1 and p2 will be pointing at value2
*p1 = 20; // value2 is assigned 20存储value变量的内存中的一些地址。
addr0 addr1
+--------+--------+
| value1 | value2 |
+--------+--------+现在来看看你在做什么:
p1 = &value1; // p1 = addr0
p2 = &value2; // p2 = addr1
*p1 = 10; // dereference p1 and assign 10 (value1 = 10)
*p2 = *p1; // dereference p2 and assign the value from the dereferenced p1
// (value2 = value1)
p1 = p2; // assign p1 the address p2 is pointing at (p1 = addr1)
*p1 = 20; // dereference p1 and assign 20 (value2 = 20)发布于 2020-03-13 03:03:25
在此赋值之后
p1 = p2;指针p1现在指向由指针p2指向的变量value2。也就是说,两个指针现在都指向同一个变量。
所以这句话
*p1 = 20;正在更改指向的变量value2。
至于这些语句
p1 = &value1;
p2 = &value2;
*p1 = 10;
*p2 = *p1;然后在最后一条语句中
*p2 = *p1;指针p2所指向的变量value2被赋值给指针p1所指向的变量value1的值。指针本身没有改变。
https://stackoverflow.com/questions/60660306
复制相似问题