C++指针的引用:在传参时需注意函数内是否要改变传入指针的指向,还是仅改变其指向内存块里的内容

在使用指针传参的时候,如果不使用引用,则会创建一个新的指针变量,该指针变量与原来的指针变量指向同一块内存地址,当改变函数内的指针的时候(而不是其指向的内容)则不会影响到原来的指针变量。

如下一开始,ma指向NULL,调用func_a,则func_a中的a变量指向NULL,随后第五行改变了a的指向。但是不影响原来ma的指向。输出结果, a指向新地址,ma指向NULL。
调用func_b,由于func_b中的a是对ma的一个引用,改变这里的a的指向,则ma的指向也会被影响,故而结果都指向新地址。

  1 #include <iostream>    
  2 using namespace std;   
  3                        
  4 void func_a(int *a) {  
  5     a = (int*) malloc(sizeof(int) * 5);
  6     cout << a << endl; 
  7 }                      
  8                        
  9 void func_b(int*&a) {  
 10     a = (int*) malloc(sizeof(int) * 5);
 11     cout << a << endl; 
 12 }                      
 13                        
 14 int main()             
 15 {                      
 16     int* ma=NULL;      
 17     func_a(ma);        
 18     cout << ma << endl;
 19                        
 20     func_b(ma);        
 21     cout << ma << endl;
 22     return 0;          
 23 }

结果符合预期:

0x555d7e084e70
0
0x555d7e0852a0
0x555d7e0852a0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值