C++引用的概念

引用是什么?

引用不是新定义的一个变量,而是给已经存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间.
比如孙悟空,尊重它的时候叫他齐天大圣,不尊重他的时候叫他弼马温,《西游记》孙悟空对战金角、银角大王那一回,它还给自己取了很多别名:孙行者、行者孙、者行孙其实都是一个人。

在这里插入图片描述

引用的别名

在这里插入图片描述
在这里插入图片描述
从上面调试我们可以看出,一个变量可以有多个别名,从存储的角度来讲,先是给变量a开了4个字节的存储空间,空间里面放了一个10,此时a的值就是10。ra又是a的别名,x又是a的别名,y又是x的别名,所以它们存的值是相等的,3次加加后就变成了13,地址也是指向同一块内存空间的。

引用的传参

在这里插入图片描述
m是cc的别名,dd的别名又是n,所以m和n的交换就是cc和dd的交换,这就是利用了一个引用的传参,就不用传地址那么麻烦了!
比如大家在用二级指针的时候能更好地体现它的一个价值,改变一个实参传它的指针,要想改变指针就得传二级指针,我们用引用的话就会方便很多,直接给指针变量取个别名,就不用传二级指针了!

指针和引用的区别

1、两者的定义和性质不同
在这里插入图片描述
上面定义了一个整型变量 a,p 是一个指针变量,p 的值是变量 a 的地址;
而引用 r,是 a 的一个别名,在内存中 r 和 a 占有同一个存储单元。

2、指针可以有多级,引用只能是一级
在这里插入图片描述

3、指针可以在定义的时候不初始化,引用必须在定义的时候初始化
在这里插入图片描述

4、指针可以指向NULL,引用不可以为NULL
在这里插入图片描述

5、指针初始化之后可以再改变,引用不可以
在这里插入图片描述

6、sizeof 的运算结果不同
在这里插入图片描述

7、自增运算意义不同
在这里插入图片描述
如上图所示,p++之后指向a后面的内存,r++相当于a++。

8、指针和引用作为函数参数时,指针需要检查是否为空,引用不需要
在这里插入图片描述
指针需要检查,引用不需要,但指针和引用都可以作为函数参数,改变实参的值。因此,引用的定义是:引用初始化以后不能被改变”不是指变量的值不可变,而是指向的变量地址不可变。

引用的特性

1.引用在定义时必须初始化
2.一个变量可以有多个引用
前两个特性上面已经说的很清楚了,所以这里就不做介绍了。
3.引用一但引用一个实体,再不能引用其他实体
在这里插入图片描述
在这里插入图片描述
通过调试我们看到a和它的别名ra指向的是同一个内存空间,ra的改变就是对a的改变,但b是指向另一个内存空间,所以b是赋值。

常引用

含义:常引用是指利用 const 修饰的引用类型。 由于引用本身已经绑定不可解绑,因此所用的 const 引用都是底层 const,即引用对象不能改变 (俗称常引用)。

使用场景

1.做参数

void swap(int& left,int& right)
{
int temp=left;
left=right;
right=temp;
}

做参数直接使用。
2.做返回值

int& count()
{
static int n=0;
n++;
return n;
}
int main()
{
int ret=count();
return 0;
}

做返回值不是把这个n做返回值,中间会产生一个临时变量,返回的是临时变量,这个临时变量就是n的别名,如果是函数调用的话n生成的临时变量就会被销毁,如果去访问就会出现野指针的问题,就不能用引用返回,出了作用域,返回变量存在才能引用返回。所以我们要加static保护起来,延长生命周期,使存储在静态区的数据生命周期与程序相同。

引用返回的意义

1.减少拷贝,提高效率
2.修改返回值

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

神之子-小佳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值