zoukankan      html  css  js  c++  java
  • 指针引用和引用指针的区别

    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
    请按任意键继续. . .
    
    
  • 相关阅读:
    PHP:面向对象学习笔记,重点模拟Mixin(掺入)
    Mybatis Plus 更新
    Mybatis Plus 自定义SQL和分页插件
    Mybatis Plus 查询方法
    Mybatis Plus 快速入门
    Ribbon 负载均衡服务调用
    三个注册中心异同点
    Consul 服务注册与发现
    Spring Boot 集成 Swagger
    Eureka 服务注册与发现
  • 原文地址:https://www.cnblogs.com/urahyou/p/11841124.html
Copyright © 2011-2022 走看看