C++中*&(指针引用)和*(指针)的区别

指针是存放地址的变量,指针引用指的是这个变量内容(指针的内容也就是地址)的引用,C++中如果参数不是引用的话会调用参数对象的拷贝构造函数,故如果使用*的话改变的是创建一个新指针在该函数内运行,新指针拷贝了那个指针变量的值(即地址),原指针指向的地址并未改变。如果想改变指针所指的对象(即改变指针里面存的地址),就要使用指针引用。注意:当引用被创建时,它必须被初始化。而指针则可以在任何时候被初始化,所以代码中想使用引用前函数内先进行了初始化操作。代码如下:

#include <iostream>
using namespace std;
struct point {
    int x;
    int y;
};
void change1(point *&p) {
    p = new point;
    p->x = 4;
}
void change2(point *p) {
    p = new point;
    p->x = 4;
}
void test1() {
    point *num = new point;
    num->x = 10;
    change1(num);
    std::cout << "指针引用的结果" << num->x << endl;
}
void test2() {
    point *num = new point;
    num->x = 10;
    change2(num);
    std::cout << "指针的结果" << num->x << endl;
}
int main() {
    cout << "开始执行程序" << endl;
    test1();
    test2();
    cout << "执行程序完毕" << endl;
    return 0;
}

结果如下:

开始执行程序
指针引用的结果4
指针的结果10
执行程序完毕

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/81448061