c++ 中*&的应用(个人理解

1. &的介绍

我们都知道&在c语言中表示的是取地址符

而在c++中表示引用

int &b=a
这表示b为a的别名,即以后对b的任何操作都可以看成对a的操作

你也可以这么理解:
在这句之后,你用替换把b换为a,在任何意义上都是完全一样的。

应用方法:

int main(){
	int a;
	int &b=a;
	print()
}

这样将b作为a的别名。

printf("%d",a)
printf("%d",b)

输出是一样的。

b=3;
printf("%d",a)
__________________
3

就好像你叫 “张棍斤拷”,但家里人从小叫你 “烫”,也即“烫”就是你的小名。所以让“张棍斤拷”和“烫”去打酱油,其实是一样的。

2.*&是什么?

知道了&的用法,我们知道了&的格式可以写成这样

Type a;
Type &b=a;

Type 就是任意一种类型:例如(int ,double,float…)

咱们来看这样一段代码

int A;
int *a=&A;
int *&b=a;
_________________

感觉很乱?
咱们把它稍微化一下

Type a=&A;
Type &b=a;

除了初始化,是不是就和上上段代码一样了?

这里的Type就是int *,代表的是:指针类型
所以 *&代表的就是指针类型的引用!

那很多人就会问到:既然引用和原变量都能做一样的工作,为什么还要用到引用呢?

其实引用主要的作用在函数的传参中

3.*&的用法

我们都知道一个函数怎么通过指针交换变量
例如

void swap(int *a,int *b){
	int temp=*a;
	*a=*b;
	*b=temp;
}

这样就交换完成了
下面看看用 引用&来完成

void swap(int &a,int &b){
	int temp=a;
	a=b;
	b=temp;

}

令人惊艳的是引用符号在函数传参中仍然能够使用。
这样我们就好像在主函数main里直接写一样!!

同理
我们现在来交换两个指针

int main(){
	int a,b;
	int *p=&a,*q=&b;
}

此时p指向a,q指向b
在这里插入图片描述
现在我们想交换p,q,让p指向b,让q指向a

void swap(int *zz1,int *zz2){
	int *temp=zz1;
	zz1=z2;
	zz2=temp;
}

在这里插入图片描述
在这个swap函数中,生成了三个指针变量:temp、zz1、zz2
他们分别指向如上图所示
可是上面函数的功能是这样的
在这里插入图片描述
我们成功将zz1和zz2交换了
可是,退出函数后zz1和zz2被销毁了,p、q并没有被交换

所以我们需要引用符号&来帮忙直接调用p和q

void swap(int *&zz1,int *&zz2){
	int *temp=zz1;
	zz1=zz2;
	zz2=temp;
}

在这里插入图片描述
此时的zz1是p的别名,zz2是q的别名。所以对zz1和zz2的交换就是对p和q的交换。
在这里插入图片描述

4.结论

综上可知,*&的主要作用是在函数传参中作为指针的引用,从而改变指针的指向(也就是指针的值)

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值