概念
c++中,变量的引用就是变量的别名,因此引用(reference)又成为别名(alias)。
变量的引用
int &b=a;
声明了b是a的引用,即a的别名。
在上述声明中,&是引用声明符,此时不代表地址。对变量声明一个引用,并不另开辟内存空间单元,b和a都代表同一个变量单元。在声明一个引用时,必须同时使之初始化,即声明代表哪一个变量。
- 引用不是一种独立的数据类型,它必须与某一种类型的数据先联系。声明引用必须对它初始化。
- 引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间。编译系统使引用和其所代表的变量具有相同的地址。
- 对引用的初始化,可以用一个变量名,也可以用另一个引用
int a=3;
int &b=a;
int &c=b;
- 引用初始化后不能再被重新声明为另一变量的别名。
int a=3,b=4;
int &c=a;
c=&b;//错误,改变c成为整形变量b的别名
int &c=b;//错误,重新声明c成为整形变量b的别名
将引用作为函数的参数
c++调用函数时有两种传递数据的方式,一种是常用的方法:将实参的值传送给形参,形参是实参的一个拷贝,这个中方式成为传值方式调用;另一种是将实参的地址传给引用型形参,这时形参与实参是同一个变量,这种方式成为引用方式调用。
引用注意点
- void类型不能建立引用
如void &a=10;
- 不能建立引用的数组
char c[6]="hello";
char &rc[6]=c;//错误
- 可以将变量的引用地址赋给一个指针,此时指针指向的是原来的变量
int a=3;
int &b=a;
int *p=&b;
//相当于p指向变量a
int *p=&a;
- 可以建立指针变量的引用
int i=5;
int *p=&i;
int * &pt=p;//pt是一个指向整形变量的指针变量的引用,初始化为p
- 可以用const对引用加以限定,不允许改变该引用的值
int i=5;
const int &a=i;
a=3;//改变引用a的值,错误
i=3;//合法,不阻止改变引用所代表变量的值
- 可以用常量或表达式对引用进行初始化,但此时必须用const作声明
int i=5;
const &a=i+3;//合法