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

原文地址:https://www.cnblogs.com/luntai/p/5398202.html