指针是存放地址的变量,指针引用指的是这个变量内容(指针的内容也就是地址)的引用,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