17.引用

引用(reference)

​ 对于计算机来说,引用和指针很类似,都表示地址。

​ 但是一定要注意,引用本身不是新的变量也不创造新的变量,它是对以往的变量的引用。



1.常见的引用写法

int&是一种引用类型,不是给int取址,可以用这个类型创建引用。

具体来说,为已经存在的变量创建了一个别名(alias)

int a = 8;
int& ref = a;

像这个案例中,真正的变量只有a一个,ref不是一个新的变量,ref就是a,修改ref和修改a是等价的。



2.参数传递时的引用

当我们想用函数修改变量时,我们可以利用引用来实际上修改原本的变量。

函数传参有指针传递引用传递,接下来我们对比学习两种 。

从我个人学习来看,引用是可读性更好的一个选择

2.1 指针传参

用指针的话相对繁琐,我们在函数内还要解引用(dereference)

指针实际上就是地址,这个过程中我们传递的是地址,当我们修改变量时自然就需要解引用

注:解引用符号优先级低于四则运算,运算时要加上括号
void Increasement(int* value) {
	(*value) ++;
}

int main() {
	int a = 8;
	Increasement(&a);
}

2.2 引用传参

使用传引用的话,函数中的变量和原本的变量是同一个,自然不再需要解引用。

这一点可以通过调试来观察。

注:调试在第11讲中学习过,这里我们需要用到断点(breakpoint)和步入(F11)
void Increasement(int& value) {	//这一句就相当于int& value = a
	value++;
}

int main() {
	int a = 8;
	Increasement(a);
}

不妨在main()函数中调用Increasement()的地方设置断点

注:断点是让程序运行到该句之前

此时,我们可以在内存窗口查看a的地址a的值,此时value还不存在


接下来我们进入Increasement(),此时value创建完成,我们可以看到value的地址value的值

在这里插入图片描述
在这里插入图片描述

可以看到,显然value和a指的就是同一个变量。

根据上面的观察,我们就可以理解到,传引用不再是传地址给函数,而是传了变量本身进去,自然在运算时也不必需要解引用之类的,因为这里的value就是a



3.引用不可修改

引用只有定义时可以赋值

错误情况一:想要再次赋值。

不可以,因为此后ref就是aref = b表示的意思是a = b,即把b的值赋给a。

&ref表示的就是&a也就是a的地址,是不可以修改的。

int a = 5;
int b = 8;

int& ref = a;	//ref是a的别名
ref = b;		//把b的值也就是8赋值给a,而不是把ref换成b的别名

在这里插入图片描述


错误情况二:先声明,后赋值。

声明引用时必须立刻给出引用变量,不允许先声明后给值。

int &ref;
ref = a;	//这就是不合法的

在这里插入图片描述


学习资料来源:https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb

欢迎大家关注视频原作者cherno,本文是我对其视频的学习笔记。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去人777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值