https://www.cnblogs.com/hslzju/p/5396987.html
    若要通过函数B修改函数A中的某个变量a。需要获得变量a的地址,如果a是普通变量,需要获得一级指针。如果a是指针,需要获得二级指针。

    比如有一颗二叉树如下:

    1. typedef struct BiTNode
    2. {
    3. TElemType data;
    4. struct BiTNode *lchild,*rchild;
    5. }BiTNode,*BiTree;

    如果CreateBiTree用BiTNode*类型的形参

    1. void CreateBiTree(BiTNode *T){......}
    2. int main(){
    3. struct BiTNode *p=NULL;
    4. CreateBiTree(p);
    5. }

    这样T会指向一棵二叉树,但是p还是指向NULL。

    所以应该传入二级指针

    1. void CreateBiTree(BiTNode **T){......}
    2. int main(){
    3. struct BiTNode **p=NULL;
    4. struct BiTNode *b=NULL;
    5. p=&b;
    6. CreateBiTree(p);
    7. }

    这样操作*T也就是操作main中的b。最后b也会指向一棵二叉树。

    1. void CreateBiTree(BiTNode **T){......}
    2. int main(){
    3. struct BiTNode **p=NULL;
    4. struct BiTNode *b=NULL;
    5. p=&b;
    6. CreateBiTree(p);
    7. }

    或者也可以返回指针

    1. BiTNode * CreateBiTree(BiTNode *T)
    2. {
    3. ......
    4. return T;
    5. }
    6. int main(){
    7. struct BiTNode *p=NULL;
    8. p=CreateBiTree(p);
    9. }

    把T(最终指向创建好的二叉树的树根,树根的类型也是BiTNode ), 返回给BiTNode *类型的p。这样p也指向创建好的二叉树的树根。