c++ - 引用变量和指针问题

标签 c++ variables pointers reference

我有一个指针指向一个整型变量。然后我将这个指针分配给一个引用变量。现在,当我将指针更改为指向其他某个整数变量时,引用变量的值不会改变。谁能解释一下为什么?

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/

相关文章:

c++ - 访问违规写入位置,在我的循环中

swift - 如何在 Swift 中抓取其他本地标签数据?

java - 自动生成的静态变量,必须在构造函数中传递以进行对象实例化

python - 如何从Python中的函数返回字典和多个变量?

c - 指针和动态数组的大小

c++ - 指向成员函数声明/使用问题的 Variadic 模板指针

python - Cython 抛出语法错误

c++ - 使用CUDA和纹理进行图像减法

c - C 中 malloc 的惯用宏?

c++ - C++中的指针数组