目录
定义:
给变量起别名
用法:
数据类型& 别名=原名
例:
之所以改动b的值,a也会改变,是因为引用类似于地址传递
注意:1、引用必须要初始化:如:int &b 是错的;
2、引用一旦初始化后,就不可更改。如:int& b=a;
int& b=c; 只是错的,重定义
接下来,我们看看引用的使用场景和方法:
引用做函数参数:
例1:值传递:形参不修饰实参
注意第6行和第17行,后面要讲到
可以看到,即使在子函数里把a和b的值互换了,但在主函数里a和b的值并未发生交换
例2:地址传递:形参修饰实参
注意第6行和第17行,还有子函数里的a b用了解引用符号( * )
可以看到,在子函数里把a和b的值互换了,并且在主函数里a和b的值也发生了交换
以上两种方法在其他语言里也有,而引用传递只在c++中才有,注意它们的区别!
例3:引用传递:形参修饰实参
注意第6行和第17行
可以发现,引用传递和地址传递都可以改变主函数里实参的值,所以我们可以通过引用传递来代替使用地址传递,在c++中大多数时候都是用引用传递而非地址传递
只要注意这三个例子的第6行传递的形参和第17行传递的实参,就可以很容易区分它们的不同
引用做函数返回值
作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量的引用
用法:函数调用可以作为左值
错误例子:
打印错误,因为a是局部变量,局部变量在栈区,在子函数结束时自动释放地址
正确例子:
打印正确,用static修饰变量a,可以让a不被自动释放
函数调用作为左值:
例:
第14行,把函数调用作为左值,并赋值为100,本质上是return的返回值被赋值为100,此时ref也被赋值为100
下一期会介绍引用的本质和常量引用的作用和使用方法