关于C++ 指针引用 *&
T *a;
T *b;
b = new T(...);
如果在传参时想要调用a指针的内存和b这个对象,需要用
定义构造:
XXX(T * &a,T * b)
函数调用:
XXX(a,b);
两者的区别:
* &a是指针引用,他可以对修改指针的指向,也可以指针指向内存地址里的内容。
而*b本质是传值,是传b指针的值,我们通过b这个拷贝构筑出来的b’指针修改b所指向的内存地址里的内容,但不能修改b本身。
综上所述如果需求是修改指针指向内存空间的值,同时需要修改指针本身的值(指向的位置),就可以用*&作为传参,在函数调用的时候使用的是a,也就是指针的值。
#include <iostream> using namespace std; void z(int* &p) { cout << "此时a2地址为:" << endl; cout << p << endl; // *p = 10; int a3; cout << "此时a3地址为:" << endl; cout << &a3 << endl; p = &a3; } int main() { int a = 5; int* a2; a2 = &a; cout << "此时a地址为:" << endl; cout << &a << endl; z(a2); cout << "修改后a的值:" << endl; cout << a << endl; cout << "修改后a2地址:" << endl; cout << a2 << endl; cout << "Hello World!\n"; }
(在修改完a2指针之后,a是不受影响的,因为上面
int* a2
a2 = &a
是一个拷贝构筑,把a的地址给了a2而已,只是a2这个格子里放了a的地址,a2里的值不会对他指向的对象的内容造成影响。
)
浙公网安备 33010602011771号