引用(Reference)是 C++ 相对于C语言的又一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于 Windows 中的快捷方式,一个可执行程序可以有多个快捷方式,通过这些快捷方式和可执行程序本身都能够运行程序;引用还类似于人的绰号(笔名),使用绰号(笔名)和本名都能表示一个人。
定义方式:
引用的定义方式类似于指针,只是用& 取代了* ,语法格式为:
type &name = data;
type 是被引用的数据的类型
name 是引用的名称
data 是被引用的数据。
注意:
(1)
引用必须在定义的同时初始化
,并且以后也要
从一而终
,不能再引用其它数据,这有点类似于常量(const 变量)。(与指针的区别)
(2)引用在定义时需要添加& ,在使用时不能添加& ,使用时添加& 表示取地址。
常引用:
如果不希望通过引用来修改原始的数据,那么可以在定义时添加 const限制,形式为:
const type &name = value;
也可以是:
type const &name = value;
这种引用方式为常引用。
引用作为函数参数:
在定义或声明函数时,我们可以将函数的形参指定为引用的形式,这样在调用函数时就会将实参和形参绑定在一起,让它们都指代同一份数据。
如此一来,如果在函数体中修改了形参的数据,那么实参的数据也会被修改,从而拥有“在函数内部影响函数外部数据”的效果。
例如:
//按引用传参
void swap3(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
//直接传递参数内容
void swap1(int a, int b)
/传递指针
void swap2(int *p1, int *p2)
只有引用没有产生临时变量。
引用作为函数返回值:
在将引用作为函数返回值时应该注意一个小问题,就是
不能返回局部数据
(例如局部变量、局部对象、局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了,C++ 编译器检测到该行为时也会给出警告。