C++探索指针,双重指针,引用

c++探索 专栏收录该内容
4 篇文章 0 订阅

当我们的函数的参数有指针时:

void change(int *_a,int &b){
_a=&b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(p_a,b);
printf("%d",*p_a);
}

输出为:10

其实系统有一个隐含的操作,就是_a=p_a,让_a也指向p_a所指向的地址,而我们对_a的指向进行改变的时候并不会影响p_a的指向。但是如果对_a指向的地址所存放的数据进行操作的话,p_a指向的地址所存放的数据也会改变,因为他们指向的同一地址。

比如这样:

void change(int *_a,int &b){
*_a=b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(p_a,b);
printf("%d",*p_a);
}

这样输出就变成了20,因为是对_a和p_a共同指向的地址所存放的数据进行操作。


但有时候我们需要的是把p_a的指向改变,让p_a=&b,而不仅仅是对p_a所指向的地址所存放的数据进行改变。这时候我们就需要用到双重指针,顾名思义,即指向指针的指针,就是指向一个指针的地址,这样就可以把一个指针的地址传递进去,从而直接对那个指针进行操作,比如:

void change(int **_a,int &b){
*_a=&b;
}
void main(){
int a=10,b=20;
int *p_a=&a;
change(&p_a,b);
printf("%d",*p_a);
}

这里面隐含操作就是 int** _a=&p_a;这样*_a就是p_a了,所以输出为20


引用就是给一个变量取一个别名,比如

int a=10;

int& ra=a;

ra=20;

printf("%d",a);

这样输出就是20,因为ra就是a,对ra进行操作就是对a进行操作,所以我们经常这样对实参进行操作

就像这样

void change(int& a){
a=20;
}
void main(){
int a=10;
change(a);
printf("%d",a);
}



  • 5
    点赞
  • 1
    评论
  • 7
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

qq_33631303

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值