c++引用&(大话版)小白看了秒变大白哦

一,概念

是对已知的变量取别名,并与它引用的对象共用同一块空间

类型& 引⽤别名 = 引⽤对象;

int a = 0;
// 引⽤:b和c是a的别名
int& b = a;

就像在《西游记》中孙悟空(变量)可以叫孙大圣悟空猴哥。这里指的全是他一个人(空间)。

 但是,不得不🤮一下祖师爷当初设计的与C语言相同符号&,让后续辨析&费了很大劲。

 二,引用的特征

•🔪 引⽤在定义时必须初始化
int main()
{
int a = 10;
int& ra;
return 0;
}

•🔪🔪⼀个变量可以有多个引⽤
int main()
{
int a = 0;
int& b = a;
int& c = a;
cout << &a << endl;
cout << &b << endl;
cout << &c << endl;
return 0;
}

typedef unsigned int uint;

这⾥取地址我们看到是⼀样的

•🔪🔪🔪 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体
int main()
{
	int a = 0;
	int d = 1;
	int& b = a;
	int& b = d;
	return 0;
}

三 ,引用的使用

🥤引用传参->减少拷贝提高效率

图一中形参是实参的拷贝有4*1000=4000个字节

🌸图二图三都是引用传参的方法

辨析图二为传指针占4/8个字节,而图三是别名不另开空间

🥤引用作返回值->改变引用对象的同时改变被引用对象

在我们在实现栈中有top取栈顶元素

❌ ❌    ❌  中间商  ❌    ❌    ❌                             ✅  ✅   ✅  无中间商 ✅  ✅   ✅

取栈顶元素中为什么会❌ 呐

因为c/c++规定返回值存在临时寄存器(中间商)中,所以被引用对象改变时已经销毁了产生野指针(进栈创建出栈就销毁)通俗->(进函数创建出函数就销毁)-

那传引用为什么✅那

返回的栈是在堆中建立的所以没有了野指针且返回的是别名无临时变量(中间商

拓展

💩(辨析)#define与typedef与引用的不同
#define N 10;

定义宏(#define)的常亮,N替换成宏用符号代替常量 好处:是预处理阶段将N换成10.

typedef unsinged int uint;

typedef :给类型取别名

🪡引用的底层逻辑 

这是对引用和指针的汇编代码

发现划横线的地方相同---->>>引用的底层是指针 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值