zoukankan      html  css  js  c++  java
  • c的二级指针

    ----"c 语言的精华在于指针的灵活性。学好指针的目的在于尽可能少的使用指针。"

      在敲binary search tree(二叉查找树),遇到了问题。在删除的时候,如果删除的是root节点,那么要改变根节点的地址,在实现时会非常卵痛。后来发现有一种好的方法就是使用二级指针,这样可以轻松改变root节点的地址。我只需要改变指向root节点的指针的指针中的所存的地址就好了。为了搞明白二级指针,做了一下实验:

    typedef struct Tree_Node
    {
        int val;
        Tree_Node *left, *right, *parent;
        Tree_Node(int x)
        {
            val = x;
            left = NULL;
            right = NULL;
            parent = NULL;
        }
    }Node, *PNode;
    int main()
    {
        Node x(1);
        cout<<&x<<endl;
        Node *p = &x;
        cout<<&p<<"    "<<p<<"    "<<p->val<<endl;//&p : p自己的地址     p : 指向(x)的地址   p : 指向地址处(x)val值
        Node **pp = &p;
        cout<<&pp<<"   "<<pp<< "   "<<(*pp)<<"   "<<(*pp)->val<<endl;//&pp : pp自己的地址    pp : 指向(p)的地址     *pp : 取出pp所存(p)地址处的值(&x)
        //可以看到 PNode 实际上就是一个 Node*, 那么这里pnode就是一个(Node**)也就是一个指向p(一级指针)的二级指针
        PNode *pnode = &p;
        cout<<&pnode<<"   "<<pnode<< "   "<<(*pnode)<<"   "<<(*pnode)->val<<endl;
        return 0;        
    }    

      最后完成了搜索二叉树的一些基本操作。附上gitlab仓库链接:git@gitlab.com:luntai/algorithm.git

  • 相关阅读:
    Java中hashCode() 和 equals()
    【转】Java操作Excel竟然这么简单!
    SpringMVC上
    网络基础知识(2)
    网络基础知识 (1)
    线程的安全
    多线程
    字符编码ANSI和ASCII区别、Unicode和UTF-8区别
    序列化对象
    IO流_File类
  • 原文地址:https://www.cnblogs.com/luntai/p/5398202.html
Copyright © 2011-2022 走看看