2011-08-09 126 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的引用。

後來,當您將pt指定爲指向bunnies時,則不會指望rodents引用發生更改。

編輯:爲了說明@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

所以你的意思是說,如果齧齒動物被分配給一個變量,那麼它不能再引用任何其他變量。 – Naphstor

+0

@Naphstor:是的,你是正確的。引用不能綁定引用任何其他變量,它們總是保持對它們綁定到的變量的引用。 –