理解指向指针的引用

 指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的"别名".  
  而且它如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.  

指向指针的引用的特殊点在于如下两点:

(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。

        为了方便读者的理解,我们看两种情况,代码稍有不同。

第一种情况,使用了指向指针的引用。

第二种情况:只有普通的引用,

 

 


重点 : 上图结果反了,对于左边例子,p是temp指针的引用,也即temp的别名,当改变p指向时,temp的指向也会跟着变!

 

(2)指向指针的引用,可以实现对传递给形参的实参数值的交换。即指向指针的引用可以修改指针的值,在参数传递时是传址。

读者看详细分析以下例子进一步学习:

  1. <pre class="cpp" name="code">#include<iostream>  
  2. using namespace std;  
  3.   
  4. void ptrswap2(int *&v1,int *&v2)//指向指针的引用是某一指针的别名,同变量的引用一样,可以实现对传递给形参的实参数值的交换  
  5. {  
  6.     int *temp=v2;//指针别名,当然以指针的形式来应用  
  7.     v2=v1;  
  8.     v1=temp;  
  9. }  
  10.   
  11. void ptrswap1(int *v1,int *v2)//利用指针进行数值交换,改变的只是形参的指向,实参的值保持不变;  
  12. {  
  13.     int *temp=v1;  
  14.     v2=v1;  
  15.     v1=v2;  
  16. }  
  17.   
  18. int main(){  
  19.   
  20. int i=10;  
  21. int j=20;  
  22. int *pi=&i;  
  23. int *pj=&j;  
  24.   
  25. cout<<"before swap using pointer as parameter: pi="<<*pi<<" pj="<<*pj<<endl;  
  26. ptrswap1(pi,pj);  
  27.   
  28. cout<<"after swap using pointer as parameter, the value that pointer points to don't change"<<endl<<":: pi="<<*pi<<" pj="<<*pj<<endl;  
  29.   
  30. int i2=10;  
  31. int j2=20;  
  32. int *pi2=&i2;  
  33. int *pj2=&j2;  
  34.   
  35. cout<<"before swap using Reference of pointer as parameter:: pi2="<<*pi2<<" pj2="<<*pj2<<endl;  
  36.   
  37. ptrswap2(pi2,pj2);  
  38.   
  39. cout<<"after swap, the value that pointer points to  changed: pi2="<<*pi2<<" pj2="<<*pj2<<endl;  
  40.   
  41. return 0;  
  42. }  

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值