C++中函数形参为“类型 *&变量名”什么意思?

来源:百度知道 编辑:UC知道 时间:2024/06/25 07:21:23
例如一个函数定义:
void test( DATA_TYPE *&var )
{
...... // 假设 DATA_TYPE 为某种类型
}
我想问的是,若引用变量 *&var 相当于直接引用 var,可是再 C++ 中,若函数形参为 &var 表示“引用”,那么在“引用”前加指针运算符,表明的是此函数接收变量 var 的地址??还是接收别的??若给出答案,请给出出处或证明回答正确的例子,谢谢。

一、先看一段代码:

#include <iostream>

using namespace std;

void freePtr1(int* p1)

{

delete p1;

p1 = NULL;

}

void freePtr2(int*& p2)

{

delete p2;

p2 = NULL;

}

void main()

{

int *p1 = new int;

*p1 = 1;

freePtr1(p1);

int *p2 = new int;

*p2 = 2;

freePtr2(p2);

system("pause");

}

思考:在freePtr1和freePtr2 的比较中,你能发现它们的不同点吗?

二、对代码进行解释:

#include <iostream>

using namespace std;

void freePtr1(int* p1)

{

//未释放内存前 -> p1 Address : 0012FDDC p1 value : 003429B8,在这里,p1它也是一个变量,既然是一个变量,那么它将会以值的传递,把外部变量p1传到栈内,在栈内产生一个地址:0012FDDC,当然,它的值不会变仍然是指向堆地址:003429B8 。

delete p1; //系统回收p1值的地址003429B8处的内存。

p1 = NULL;//对p1赋以NUL