2016-04-06 4 views
-1
int a = 1, b = 2, c =3; 
int *d = &a; int *e = &b; int *f = &c; 
int &g = a; int &h = b; int &k = c; 
*e = k; 
e = &h; 
*d = h; 
cout << g << ", " << b << ", " << *f << endl; 

は、このコードの出力は3,3,3ですが、私は、なぜ:( を理解することができませんでした!ポインタベースのC++コード出力

+5

' A'を、 'B'を、「c」を直接的または間接的に含む。'c'は最初から値が3であった。 '* e = k; '(kは' c'( '= 3')への参照であり、' e'は 'b'へのポインタである)の中の'後で値を変更しないでください。 '' d 'h' '( 'h'は' b '( '= c = 3')への参照であり、' d'は 'a " –

+0

@AlgirdasPreidžius:それは答えとして掲示されるべきです! – AndyG

+0

@AndyGまあ、私はそれをしませんでした。思考の単純なダンプは、私の目には、答えには十分ではないので、私もですそれを正しくフォーマットするのは怠惰だ –

答えて

1
See my comments explaining the result of the code 

int a = 1, b = 2, c =3; //initialization 
int *d = &a; // pointer d has the address of a's memory location 
int *e = &b; // pointer e has the address of b's memory location 
int *f = &c; // pointer f has the address of c's memory location 
int &g = a; // declared g as an alias for a,ie you can use g in place of 'a' 
int &h = b; // declared h as an alias for b , similar to the above 
int &k = c; // declared k as an alias for c 
*e = k;  // *e ie b is assigned the value of c (k is alias for c) 
e = &h;  
*d = h;  // *d ie a is assigned the value of b (b=3 and h is alias for b) 
cout << g << ", " << b << ", " << *f << endl; // prints g(alias of a), b, f(alias of c) 
0

1.Initially a=b=c=3

2.Aポインタは、その値が別のvariable.Here deのアドレスである変数であり、fab及びへのポインタでありますそれぞれ

3.When *e=k(& Bに等しい)アドレスBのコンテンツを2から3に変更される

4.A参照変数は、それは、別の名前であり、別名であります既に存在する変数です。 ghおよびkは参照です。元の変数と参照は同じ値を参照しており、参照の真の美しさは、元の値と同じように参照を使って同じ操作を行うことができますあなたは、この基本的な概念を理解すれば、1から3

0
int a = b is setting a's VALUE to b's VALUE 
int* a = &b is setting a's VALUE to the ADDRESS of b 
int& a = b is setting a's ADDRESS to b's ADDRESS (a is a reference to b) 

に上記の出力をaの値を変更variable.Now、hbに初期化された整数参照であり、db。だから*d=hのアドレスが含まれていますステートメントはかなり簡単に把握するように見えます。

0
*e = k; 

eは現在ポインタbである。 kは、値が3であるcへの参照です。したがって、c(3)の値をbのアドレスにコピーします。

状態:A = 1、B = 3、C = 3

e = &h; 

eあなたはhのアドレスを割り当てるためのポインタです。 hbへの参照ですので、これはbのアドレスをとります。参照のアドレスを取得すると、参照されているもののアドレスが取得されます。

この操作は出力に関係しません。

状態:A = 1、B = 3、C = 3

*d = h; 

dhこれは、値3を代入3の値を有するbへの参照である、aへのポインタでありますint型は今、aあるdによって指さ:

状態:A = 3、B = 3、C = 3あなたは、あなたのすべての変数に3` `割り当てられ