引用的定义:对地址(变量)取别名,对引用的操作与对原变量的直接操作效果完全一样。
声明方法:类别标识符&引用名=目标变量名
引用的实质:其实就是取一个地址之后对其解引用
tips:其实引用相当于给一个变量取小名,一个人只能有一个大名,但是可以有无数个小名,而且这些小名也都是你,对这些小明实施的操作也是可以同步到你身上的。
【一】引用特性
1.引用在定义时必须要初始化
2.一个变量可以有多个引用
3.引用一旦引用一个实体,再也不能引用其他实体(和取小名类似,在你家族中给你叫了一个小名,那么这个小名仅仅属于你了)
对这个引用重新指向一个实体的时候,其实相当于给这个引用赋值了
【二】引用的风险
上面我们说过,引用在底层是依靠指针实现的,那么指针有越界的风险,那么引用呢?
看以下代码及运行结果:
为啥会出现这种结果呢?
函数的空间使用的是栈上的空间,当你函数运行结束时编译器会自动将这块空间回收,且覆盖。那么你的引用继续指向的还是这块位置,那么就会出现这种访问一堆莫名其妙的数字。
这个小时候就有聪明的小伙伴要问了,那么这个问题咋解决呢?
其实很简单的,使用static关键字即可,static关键字修饰的数据是存放在常量空间区域的,那么这个空间就不会随着函数调用而销毁,从而能很好的保存下来。
【三】const关键字和引用之间的火花
有的人说当使用const关键字修饰引用的时候到底是引用的对象不能修改,但是引用对象的数值不能修改?那就让我们试试看。
从这行代码大家可以看出,使用const修饰之后,你会发现引用的对象不能修改了,引用本身也不能修改了,相当于这个引用对象变成了一个只读的权限。
tips:这里就涉及到一个c/c++部分一个很简单的问题,就是权限的放大缩小问题,使用const修饰之后相当于这个变量就成了仅可读的权限,但是在c/c++里面权限只能缩小且不能放大,你将这个变量赋给另外一个可以赋值的变量这显然是权限放大,显然是不允许的。
以上就是这期博客的全部内容,若有什么不对的地方欢迎大家位于评论区指正,若是觉得写的不错还请一键三连。