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里的值不会对他指向的对象的内容造成影响。
)
原文链接: https://www.cnblogs.com/zyghhy/p/15802139.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/185422
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!