引用变量的主要用途是用作函数的形参。这样函数将使用原始数据,而不是副本。除指针之外,引用也为处理大型结构提供了一种非常方便的途径。
在C++中使用&符号标识引用。也就是说C++给&符号赋予了另一个含义,将其用来声明引用。
引用的声明格式如下,并且rats和rodents指向了相同的值和内存单元
int rats;
int& rodents = rats;
引用的简单使用示例
#include <iostream>
using namespace std;
int main()
{
int rats = 101;
int& rodents = rats;
cout << "rats = " << rats << " ,&rats = 0x"<< &rats<< endl;
cout << "rodents = " << rodents <<" ,&rodents = 0x"<< &rodents <<endl;
rodents++;
cout << "rats = " << rats << " ,&rats = 0x" << &rats << endl;
cout << "rodents = " << rodents << " ,&rodents = 0x" << &rodents << endl;
return 0;
}
引用的初始化示例
#include <iostream>
using namespace std;
int main()
{
int rats = 101;
int& rodents = rats;
cout << "rats = " << rats << " ,&rats = 0x"<< &rats<< endl;
cout << "rodents = " << rodents <<" ,&rodents = 0x"<< &rodents <<endl;
int bunnies = 50;
rodents = bunnies;
cout << "rats = " << rats << " ,&rats = 0x" << &rats << endl;
cout << "rodents = " << rodents << " ,&rodents = 0x" << &rodents << endl;
cout << "bunnies = " << bunnies << " ,&bunnies = 0x" << &bunnies << endl;
return 0;
}
这里截取一段该程序运行的结果图,进行说明:必须在引用声明的时候进行初始化。不能在初始化完成之后进行赋值操作。这种操作看起来好像是正确的。但是rodent变量的值从101变成了50,但是仔细看来rats变量的值也从101变成了50。这是因为rats和dodents的地址是一样的。而这两个地址和bunnies变量不同。所以该操作就等于是进行了如下赋值:rats=bunnies,也就是说将bunniese变量的值赋给了rats变量。所以可以通过初始化声明来设置引用,但不能通过赋值来设置。
从指针方面来理解等价于这样的操作:
int rats = 101;
int* pt = &rats;
int& rodents = *pt;
int bunnies = 50;
pt = &bunnies;
rodents初始化为*pt从而让rodents指向了rats,接下来将pt改为bunnies,并不能改变这样的事实。即rodents的引用是rats;