c++征途 --- 引用

 

1.引用的作用就是使得一个内存空间可以被多个代号表示,其中第一个给与的代号被我们称为原名,后面给予的代号都被称为别名 --- 其中原名就是我们正常创建变量时给的,而别名的给予则需要我们通过引用的方式来给予

2.通过引用的方式来给予别名的语法:

 如: int &b = a; --- 此时a所代表的内存空间就拥有了别名 b , a是内存空间的原名

我们既可以通过a这个原名来操作其所代表的内存空间中的数据,也可以通过别名b来操作原名所代表的内存空间中的数据,如:

int a = 10;

int &b = a;

b = 1;

cout << a << endl ---- 最终我们得到的输出结果就为 1

综上 --- 通过别名和原名访问和操作的是同一个内存空间中的数据


第二部分 --- 引用的注意事项

 

1.引用必须要初始化!! --- 因为有了原名才能够有别名,所以我们必须再创建别名的同时给他找到对应的原名 --- 即引用的初始化

2.引用一旦初始化后就不可以更改了!! --- 意思是一旦给别名确定了一个原名后,就不可以更改这个别名的原名了 

3.注意一个区分:

上面这个 b = c 是一个赋值操作,而不是更改别名对应的原名 


第三部分 --- 引用作函数参数

 

 1.形参修饰实参的意思就是说 : 通过形参来修改实参 --- 如果要实现这个目的的话以前我们只有通过传地址作为参数的方式来实现,现在我们还多了一个通过引用的方式来实现。

利用别名来作为形参接收实参,这样的话就建立了一个等式关系 --- int &a = a

由于别名a和原名a操纵和访问的都是同一个内存空间中的数据,所以当我们通过别名a来修改数据的时候,由于是同一个数据,所以原名a对应的数据也会被修改为同一个值。 


第四部分 --- 引用做函数返回值

 1.不要返回局部变脸的引用 --- 原因是首先局部变量所对应的内存空间在函数结束后(函数结束的标志就是函数出现返回值)被释放,此时这个变量对应的数据也已经被消除,返回的时候由于找不到要返回的数据了于是只能返回一个随机值 --- 这是一种非法返回

而局部变量的引用对应的内存空间和局部变量同一个 ,如果我们返回局部变量的引用的话,也会出现和上面一样的现象

将函数的返回类型改为 返回值的类型加&符号 ---> 则表示的是函数返回的是返回值的引用 

 

2.函数的调用可以作为左值

 

这里面的a已经变成了静态局部变量,放在了全局区 ---> 全局区的数据只有在程序结束了之后才被系统清空  ----内存空间没被释放就能够正常找到,能找到就能够作为返回值,且能够被正常的调用

函数的返回值为变量(静态变量或者是全局变量 --- 即内存在函数结束后没被系统释放的情况下)的引用的时候, 这个返回值可以作为左值修改 --- 既可以作为左值被赋值 ---- 因为返回的是变量的引用,对引用赋值也可以直接修改对应内存空间中的数据(不过可作为左值修改的前提是内存空间要存在,而不能在函数结束之后就被释放消失了,所以说得是静态变量或者是全局变量)

ps: 别名也可以做原名然后拥有自己的别名


第五部分 --- 引用的本质

 

1.关于引用的本质最关键的就是一个转换 --- 即 当我们建立一个局部变量的引用的时候,我们用的代码是 : (以int 为例) int& a = b  ,a就是b的引用 ---->  计算机在看到这段代码之后就会自动将其转变为这样一段代码 --- int* const a = &b ---- 此时a是一个指针常量,指针常量的指向不变(即指向的内存空间不变),但内存空间中的数据可变 --- 所以说不能更改别名的原名 --- 更改了原名就好像更改了内存空间,指向就发生了改变

2.然后给别名赋值就会自动转变为解引用后再赋值 --- 解引用后赋值是直接对内存空间中的数据进行修改。

局部变量的引用本质是一个指针常量,这个指针常量中存放的是局部变量所对应的内存空间的地址


第六部分 --- 常量引用

 在参数前面加一个const就是常量引用

使用场景是:用来修饰形参,防止误操作

1.补充:引用必须引一块合法的内存空间 ---- 即 &变量是可行的,&10,&11这种&数字是不可行的

但是我们有一种方法可以让上面这种形式变的可行:

 原因是加了const之后代码会被编译器转变为上面那种形式

这一部分又会被转变为: cosnt int* cosnt ref = &temp --- 此时ref即是一个指针常量(指向的内存空间不变),也是一个常量指针(指向常量) --- 所以ref指向的内存空间中的数据不可改变

1.指针常量 --- int* const a ---> 特点是指向的内存空间不可改变,内存空间中的数据可变


2.常量指针 --- const int* a ---> 特点是指向的内存空间中的数据不可变(常量),存放数据的内存空间可变

只想读变量/参数的时候,就在它前面加一个cosnt,把它变成只读的状态,防止自己不小心写了,修改了数据造成了错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值