为了获得指针的一些效果,同时又要避免指针的一些问题,C++提供了另一种类型——引用。它也能够通过一个变量访问另一个变量,而且它比指针类型要抽象和安全一些。
*定义和使用
在C++中,可以用引用类型来定义一个变量,该变量与另一个变量占用相同的内存空间(相当于为另一个变量取了个别名),如下面的程序中,y没有自己的内存空间,而是共享x的内存空间。
int x=0;
int& y=x; //定义变量x的引用
cout<<x<<y; //输出结果为00
x=1;
cout<<y; //输出结果为1
y=2;
cout<<x; //输出结果为2
*引用作为函数的参数类型
在“C++中与指针相关的一些问题”中我用经典的swap函数说明了用指针作为函数的参数类型,下面再次用引用来实现。
void swap(int& x,int& y){int t=x;x=y;y=t;}
这样看起来似乎比指针更为简洁。
*引用作为函数的返回类型
用引用作为函数的返回值,可以避开函数返回值按值传递的问题,并且由于引用具有左值,所以还可以通过函数返回的引用来修改该返回值(当然用指针作为返回值也能实现该功能)
*总结(引用与函数的比较)
(1)引用类型和指针类型都可以实现通过一个变量访问另一个变量,但访问的语法形式不同;引用是采用直接访问形式,而指针则需要采用间接访问形式。
(2)除了在定义时指定被引用变量外,引用类型变量不能再引用其他变量;而指针类型变量定义后可指向其它同类型变量,因此,引用类型比指针类型要安全。
(3)在作为函数参数类型时,引用类型参数的实参是一个参数的名字,而指针类型参数的实参是一个变量的地址。