2011-08-09 17 views
1

私は整数変数を指すポインタを持っています。次に、このポインタを参照変数に割り当てます。現在、ポインタを他の整数変数を指すように変更すると、参照変数の値は変更されません。なぜ誰かが説明できますか?参照変数とポインタの問題

int rats = 101; 
int * pt = &rats; 
int & rodents = *pt;        // outputs  
cout << "rats = " << rats;       // 101 
cout << ", *pt = " << *pt;       // 101 
cout << ", rodents = " << rodents << endl;   // 101 
cout << "rats address = " << &rats;     // 0027f940 
cout << ", rodents address = " << &rodents << endl; // 0027f940 
int bunnies = 50; 
pt = &bunnies; 

cout << "bunnies = " << bunnies;     // 50 
cout << ", rats = " << rats;      // 101 
cout << ", *pt = " << *pt;       // 50 
cout << ", rodents = " << rodents << endl;   // 101 
cout << "bunnies address = " << &bunnies;   // 0027f91c 
cout << ", rodents address = " << &rodents << endl; // 0027f940 

ウサギにptを割り当てましたが、げっ歯類の価値はまだ101です。理由を説明してください。

答えて

2

int & rodents = *pt; 

pt(すなわちrats)を指しているものへの参照が作成されます。これはポインタptへの参照ではありません。

ptbunniesを指すように割り当てると、rodentsの参照が変更されることは期待できません。

EDIT:次のコードを検討し、@Als点を説明するために:

int value1 = 10; 
int value2 = 20; 
int& reference = value1; 
cout << reference << endl; // Prints 10 
reference = value2; // Doesn't do what you might think 
cout << reference << endl; // Prints 20 
cout << value1 << endl; // Also prints 20 

reference割り当てが参照ltselfを変更ありません。代わりに、代入演算子(=)を、参照先のオブジェクト(value1)に適用します。

referenceは常にvalue1を参照し、変更することはできません。

頭がおかしくなるのはやや難しいので、Scott Meyerの優れた本Effective C++More Effective C++をご覧ください。彼はこのすべてを私ができるよりはるかに優れていると説明します。

+1

だから、げっ歯類が1つの変数に割り当てられていれば、他の変数に再び参照することはできません。 – Naphstor

+0

@Naphstor:はい、あなたは正しいです。参照は、他の変数を参照するようにバインドすることはできず、常にそれらがバインドされた変数への参照のままです。 –