引用的使用场景
(一)给变量起别名
给变量起别名,顾名思义就像人也有别名一样,不管是别名还是原名都指的是同一个人,同样,下面声明b是a的别名,即a和b的作用相同,都代表同一变量。
int a; //定义 a 是整型变量
int &b = a; //声明 b 是 a 的引用
引用的三大特性:引用在定义时必须初始化、一个变量可以有多个引用、引用一旦引用其他一个实体,再不能引用其他实体。
注: “ & ”为引用声明符,并不代表地址。
(二)将引用作为函数的形参
使用引用类型就不必再swap中声明形参是指针变量,指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元。而且在调用swap函数时,只需要传值即可,将引用作为函数的形参更加简单、直观、方便。
void swap(int &a, int &b)
{
int temp; //调用swap
temp = a; //int i = 3, j =5;
a = b; //swap(i,j);
b = temp;
}
(三)将引用作为函数的返回值
将引用作为函数的返回值,返回值的生命周期必须长于函数的生命周期,且不能反回栈空间上的引用。关于将引用作为函数返回值会存在的一些问题将在下次博客中详谈。
int& Test(int& a)
{
a += 1;
return a;
}
指针跟引用的区别
2、指针可以指向多个变量,引用类型一旦与变量绑定就不可更改;
3、定义一个指针变量 p 时,++p偏移一个元素类型的大小,而 int a = 10; int &ra = a; ++ra则表示 在a的实体上加1;
4、两者遇到sizeof的含义也不一样,指针的大小由平台和类型觉得,引用则取决于引用实体的大小;
5、指针需要手动寻址,引用通过编译器自动寻址。