• 指针和引用作为参数的不同(一)


    指针作为函数参数,本质还是传值

    这个问题其实很常见 对指针进行修改

    总的来说,在以下情况下你应该使用指针:

    一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),
    二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。
    如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
    ———————摘自《More_effective C++》

    先贴一下代码,这里只贴了一部分

    在二叉树相关的编程中,对leftchild 或者rightchild的指向进行修改是很常见的,今天遇到了一个小坑

    class Rbtree
    {
    public:
    	Node* m_root;
    	void insert(int key,Node * root);
    }
    
    void Rbtree::insert(int key,Node * root)
    {
    	if (root == nullptr)
    	{
    		root = new Node(key);
    		return;
    	}
    
    }
    

    会有什么问题呢,在insert后,m_root 仍然为空这是为什么呢?

    Rbtree  test1;
    test1.insert(5, test1.m_root);
    

    举个例子

    int c;
    int d;
    int *a=&c;
    swap (a, b)
    

    a指针指向整型 c

    a指针的值是c变量的地址。

    你可以通过a指针修改b的值。但是你要想让a指针指向d,你就得修改a指针的值。

    但是指针作为参数传到函数的时候,是不能修改原来的值的

    那么这个时候,就应该传的是a指针的引用

    所以,上面那段代码

    应该改成

    void insert(int key,Node * &root);
    

    这样才能对root的指向进行修改

    总结一下, 对指针指向的东西的修改, 和对指针本身的修改是不同的

    如果要对指针的指向进行修改,就要用指向指针本身的指针进行修改 或者 用指针本身的引用 修改

  • 相关阅读:
    美团深度学习系统的工程实践
    Netty堆外内存泄露排查与总结
    美团点评基于 Flink 的实时数仓建设实践
    基于TensorFlow Serving的深度学习在线预估
    前端安全系列之二:如何防止CSRF攻击?
    Logan:美团点评的开源移动端基础日志库
    前端安全系列(一):如何防止XSS攻击?
    beeshell —— 开源的 React Native 组件库
    ES(一): 架构及原理
    Kibana6安装使用(windows)
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12327311.html
Copyright © 2020-2023  润新知