编程修仙之C++——第三难:引用

提示:我是菜狗,请勿借鉴,概率出错,欢迎指正。

目录

前言

一、引用的概念(不敢用定义了,怕误人子弟)

二、引用的特性

1.引用在定义时必须初始化

2.一个变量可以有多个引用

3.引用不可更改引用对象实体

三、常引用

四、使用场景

1.做参数

2.做返回值

五、引用的权限

总结



前言

        啊,引用,我敬爱你啊!C++的引用可比C语言那b指针简单多了。虽然引用比起指针而言,泛用性稍差,但是对于我这种粗心大意的程序员(学员也是员)而言,它对代码可读性的提升,就像老头对苍穹的依赖,大大提升了我调试代码的效率,好用的不得了。当然了,引用好归好,其背后也有一些坑,我在后面会讲。


提示:以下是本篇文章正文内容,下面案例可供参考

一、引用的概念(不敢用定义了,怕误人子弟)

        AI:点击查看

        我的理解:引用引用,先引后用。引用的本质就是取外号,取字。什么意思呢?打个比方:曹操是魏武帝,曹操病死,魏武帝病死。这里就进行了引用,给曹操取了魏武帝的名号,那么曹操与魏武帝本质是同一个人,两者可以完全对等(完全对等说明引用类型必须和引用实体是一样类型的)。

代码仙子更有发言权:

 int a = 0;
 int& b = a;

        其中b就是对a的引用。

二、引用的特性

1.引用在定义时必须初始化

代码仙子更有发言权:

 int a = 0;
 int& b;

        会显示错误E0252,如下:

2.一个变量可以有多个引用

代码仙子更有发言权:

int a = 0;
int& b = a;
int& c = a;
int& d = a;

        那这里可能有道友要问了:“可不可以给引用取引用呢?”答案是:可以。

代码仙子更有发言权:

 int a = 0;
 int& b = a;
 int& c = b;

3.引用不可更改引用对象实体

        引用就是一名纯爱战士,不出意外的话,一旦认定了对象实体,就白首永不分离,可以说是非常滴浪漫啊。当然,就算你想去更改,也是没有法子的。也许会有大聪明道友写出下面的例子,觉得怎么改不了呢。

代码仙子更有发言权:

 int a = 0;
 int x = 1;
 int& b = a;
 b = x;

        如果你去输出或者调用监视查看变量b的值,会发现b=1,那么是否说明x牛走了属于a的b呢?其实不然。假如是验证更细心的道友就会发现,a=1。原来,因为b与a本就是同一个人的不同名字,b=x等价于a=x,这里本质就是赋值操作。

三、常引用

        引用const修饰的变量或者常量就是常引用,而常引用是一个很容易出错的地方。

代码仙子更有发言权:

 const int a = 0;
 //int& b = a; 
 const int& b = a;
 //int& c = 0;
 const int& c = 0;

        其中标记为注释的地方就是常见的错误。

四、使用场景

1.做参数

        引用既可以代替指针作为参数传入函数,使得引用所指的对象实体可以在函数内部改变,也可以代替需要传参的变量本身作为参数传入函数,使得程序效率提升(提升的原因是免去了原本变量传参所需拷贝的步骤,节约了空间和时间),从这就不难看出引用的优秀。

2.做返回值

        这是引用最复杂的知识点,也是最容易出现纰漏的地方!

        首先,引用是依存于对象实体的,如果对象实体被销毁,那么引用就类似于野指针,其内部的值是随机的。

代码仙子更有发言权:

int& Add(int a,int b)
{
    int c = 0;
    c = a + b;
    return c;
}

        看起来好像函数最后返回了c的值作为对象实体,实则不然。根据编译器的不同,返回的值是不同的,但有一点一样,它们都是不合法的值,是不允许被访问的值,因为存储它们的空间已经随着函数的结束被释放了。由此可以得出结论,可以使用引用作为返回值的函数,要求返回的对象实体出了函数作用域依旧存在

        验证也非常简单,将上面的函数调用2次,分别输出结果,可知分晓,在此不一一罗列。

五、引用的权限

        在引用过程中,引用的权限可以平移和缩小,但是不可以被放大。什么意思呢?

代码仙子更有发言权:

const int a = 0;

int& b = a;//权限的放大(会报错)

const int& c = a;//权限的平移

///
int x = 0;
const int& y = x;//权限的缩小

总结

        引用用的好,传参没烦恼。C语言是什么东西,不熟,蒸不熟。

最后提个问题,引用与指针的区别是什么?(给你一个图的思考时间)

wujialemuzhenhaokan

应该、大抵正确的答案(点这里)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值