我在c ++中有这段代码。
#include<iostream>
using namespace std;
int main()
{
int z;
int v1,v2;
int *p1,*p2;
p1 = &v1;
p2= &v2;
*p1 = 15; // value pointed by p1 is 10
*p2 = *p1; // value pointed ny p2 is the value pointed by p1 which at the moment is 10.
p1 =p2; //p1 is assigned the value of p2 which is 10
*p1 = 20; // the value pointed by p1 is 20;
cout<<"v1:"<<v1<<endl;
cout<<"v2:"<<v2<<endl;
cin>>z;
}
此处输出为v1:15
,v2:20
。
我在这里有点困惑,p1指向v1的地址,p1指向的最新值是20而不是15,所以输出如何显示v1:15
使用输出i假设指针指向变量地址后立即分配给指针的值而不是最新值。这是正确的吗?
答案 0 :(得分:4)
您正在重新分配p1以指向与p2相同的位置,这恰好指向v2。这意味着当您将p1指向的值设置为20时,您将写入v2而不是v1。