2016-05-03 9 views
-2

私は混乱しています。 secondvalue = 20はどうですか?コメントでは、私は何かが起こっていると思っています、私はどこかで何かを逃していますか?ポインタのヘルプC++

int firstvalue = 5, secondvalue = 15; 
int *p1, *p2; 

p1 = &firstvalue; //assign the address of firstvalue to p1 
p2 = &secondvalue; //assign... secondvalue to p2 
*p1 = 10; //assign 10 to the value pointed by p1 (firstvalue now = 10) 
*p2 = *p1; //assign the value pointed by p1 to the value pointed by p2 
      //secondvalue = 10, firstvalue = 10 
p1 = p2; //assign the address of secondvalue to the address of firstvalue 
     //address of firstvalue = address of secondvalue 
*p1 = 20; //assign 20 to the value pointed by p1 (firstvalue = 20) 

出力があるべき firstvalue = 10と20 = secondvalueが、私の理解のfirstvalue = 20からと10 = secondvalueは私が間違って行くのですか?ここで

+0

コードを実行しましたか?結果は何ですか? – Igor

+0

あなたのコメントはp1 = p2で間違っています。このステートメントは、firstValueのアドレスではなく、secondValueのaddessをp1に割り当てます。 –

答えて

4
p1 = p2; //assign the address of secondvalue to the address of firstvalue 

あなたは何p2ポイントへのポイントするp1ポインタを設定します。したがって、p1secondvalueを指しています。

何ももうfirstvalueを指していません。

+0

意味があります - それをクリアしてくれてありがとう –

0

手順: FV = 5、SV = 15、P1 = FVのアドレス、P2 = SVのアドレスを割り当てます。

  1. は、あなたはあなたには、P1にP2値(あなたはSV = FVを設定)を設定FV = 10、SV = 15
  2. を持って10にP1値(FV)を設定します。したがって、FV = 10、SV = 10です。
  3. P1をP2に設定します(P1はSVを指します)。
  4. P1値を20に設定します(SV = 20に設定します)。だから、FVは、結果だSV = 20

を= 10。 firstValue = 10、secondValue = 20

0

(すなわち、P1 = P2)ポインタP1は現在P2のアドレスを指しているfirstValue = 10とsecondValue = 20の値は、コードの第7行において 真であります(実際には2番目の値のアドレスです)。ここで、* p1の値を20に変更すると、secendValueの値が変更されます。