本来是回答问题的,到这里做个笔记
*&L是指针的引用,实参是个指针。所以L是实参指针的别名,对别名L的修改,等于对实参的修改。
*L是传值,你无法改变传过来的实参指针变量的值
程序代码:
#include<iostream>
using namespace std;
void foo(int*p);
int main()
{
int a=5;
int *b=&a;
printf("%d %d\n",b,*b);
foo(b);
printf("%d %d",b,*b);
}
void foo(int* p)
{
*p=*p+1;
p=p+1;
}
输出为
可以看成指针b没变,指针b保存的值变了
程序代码:
#include<iostream>
using namespace std;
void foo(int*&p);
int main()
{
int a=5;
int *b=&a;
printf("%d %d\n",b,*b);
foo(b);
printf("%d %d",b,*b);
}
void foo(int*& p)
{
*p=*p+1;
p=p+1;
}
指针b和指针b保存的值都变了
下面是复制的。
这种技术很多用在比如定义一个安全删除指针的函数,所谓安全就是,只有当指针为零的时候才执行删除,删除之后,立刻把指针赋值为NULL。
template<typename T>
inline safe_delete(T*& ptr)
{
if (ptr)
{
delete ptr;
ptr = NULL;
}
}
我用qt和vs中都发现定义的指针都是这种安全指针。
指针不为零,不让删。删了,如果再NULL也不行。