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