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