zoukankan      html  css  js  c++  java
  • 指针和引用作为参数的不同(一)

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

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

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

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

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

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

  • 相关阅读:
    移动端调试解决方案-转载
    移动端调试工具-Weinre
    css颜色大全-转载
    目录
    多版本python import 问题解决方案
    annoy安装
    word2vec
    GBDT
    Adaptive Boosting
    融合模型Aggregation
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12327311.html
Copyright © 2011-2022 走看看