• 指针引用和引用指针的区别


    c++在传参的过程中,指针()和指针引用(&)是有区别的。
    虽然,我们往往可以通过传指针然后通过间址访问来修改指针所指向对象的值,同样,通过引用也可以直接修改对象的值。
    但是,当传指针的时候有一个问题,就是,我们虽然可以通过指针来修改指针所指向对象的值,但是我们没有不能直接修改指针的内容(也就是指针变量存放的地址),因为函数传参时实际上是把该指针复制了一遍,虽然指针里面存放的地址还是我们原本那个对象的地址,但是指针变量却不是原来的指针变量了。
    所以,当我们想要在函数里修改传过来的指针变量的地址的时候,就必须使用指针引用,否则,这种修改是“无效的”

    代码:

    #include<iostream>
    using namespace std;
    class Node {
    public:
    	int data;
    };
    void fun1(Node* node) {
    	node = new Node();
    	node->data = 2;
    }
    
    void fun2(Node*& node) {
    	node = new Node();
    	node->data = 2;
    }
    
    int main() {
    	Node * node = new Node();
    	node->data = 1;
    	fun1(node);
    	cout << "传指针并没有修改到该指针的值,而是新建了一个指针指向了一个新的对象" << endl;
    	cout << node->data << endl;
    	fun2(node);
    	cout << "传指针引用把传进来的指针指向一个新的对象,并修改该对象的值" << endl;
    	cout << node->data << endl;
    	system("pause");
    }
    

    结果

    传指针并没有修改到该指针的值,而是新建了一个指针指向了一个新的对象
    1
    传指针引用把传进来的指针指向一个新的对象,并修改该对象的值
    2
    请按任意键继续. . .
    
    
  • 相关阅读:
    ps命令
    关于typedef的用法总结
    C#中正则表达式的使用
    调试与编译
    大端和小端
    64位程序内存之我看
    C/C++内存泄漏及检测
    内核中的 likely() 与 unlikely()
    do/while(0) c4127
    django+xadmin在线教育平台(六)
  • 原文地址:https://www.cnblogs.com/urahyou/p/11841124.html
Copyright © 2020-2023  润新知