关于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里的值不会对他指向的对象的内容造成影响。


原文链接: https://www.cnblogs.com/zyghhy/p/15802139.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/185422

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 上午10:55
下一篇 2023年2月12日 上午10:55

相关推荐