首页 > 代码库 > c++指针与引用问题

c++指针与引用问题

本来是回答问题的,到这里做个笔记

*&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也不行。

c++指针与引用问题