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.结论
综上可知,*&的主要作用是在函数传参中作为指针的引用,从而改变指针的指向(也就是指针的值)