二叉树的建立中指向指针的指针的运用

来源:互联网 发布:简单的图片上传js 编辑:程序博客网 时间:2024/06/07 02:58

刚开始学C语言,对指针不是很了解,这两天看《大话数据结构》中二叉树的建立那里,运用了指向指针的指针,迷茫了一天,现在终于有了一点点思路,赶紧记录下来。在网上查了一句话:如果希望在一个函数的参数中改变一个指针的值,只能传这个指针的指针给这个函数。我理解的意思就是,如果我们调用函数时传入一个指针参数,我们在这个函数中不能修改这个指针的值,只能修改这个指针指向的内容,如果想要修改它的值,就必须把这个指针的指针作为参数传进去。比如:

void func(char **ptr){*ptr = NULL;}int main() {
char a = 'a';char *ptr = &a;func(&ptr);}
调用完func()这个函数后,主函数中的ptr现在不指向任何东西,ptr中保存的地址现在为NULL,因为在func()函数中修改了这个指针的值。如果将函数定义为func(char *ptr),则只能修改这个指针指向的东西,不能修改值。
在二叉树的建立中,使用指向指针的指针也是同样的道理:
typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;
这里,BiTree为指向BiTNode的指针。建立二叉树过程如下,约定按照前序遍历输入,空格表示不存在子节点。
CreateBiTree(BiTree *T){char c;scanf("%c",&c);if(' '==c){*T=NULL;}else{*T=(BiTNode *)malloc(sizeof(BiTNode));(*T)->data=c;CreateBiTree(&((*T)->lchild));CreateBiTree(&((*T)->rchild));}}
因为我们这建立二叉树这个函数中需要修改BiTree的值,所以函数参数需要传入BiTree的指针,也就是指向BiTNode的指针的指针。
可能我的理解有错误,请多多指教!Thanks!!!

1 0
原创粉丝点击