我有一个指针指向一个整型变量。然后我将这个指针分配给一个引用变量。现在,当我将指针更改为指向其他某个整数变量时,引用变量的值不会改变。谁能解释一下为什么?
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 分配给了 bunnies,但是 rodents 的值仍然是 101。请解释原因。
最佳答案
线
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
赋值不改变引用本身。相反,它将赋值运算符 (=
) 应用于所引用的事物,即 value1
。
reference
将始终引用 value1
且无法更改。
一开始有点难以理解,所以我建议您看一看 Scott Meyer 的优秀书籍 Effective C++和 More Effective C++ .他对这一切的解释比我好得多。
关于c++ - 引用变量和指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990988/