|
30鱼币
二叉树的建立和遍历那一课程
- #include <stdio.h>
- #include <stdlib.h>
- typedef char ElemType;
- typedef struct BiTNode
- {
- char data;
- struct BiTNode *lchild, *rchild;
- } BiTNode, *BiTree;
- // 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据
- 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);
- }
- }
- // 访问二叉树结点的具体操作,你想干嘛?!
- visit(char c, int level)
- {
- printf("%c 位于第 %d 层\n", c, level);
- }
- // 前序遍历二叉树
- PreOrderTraverse(BiTree T, int level)
- {
- if( T )
- {
- visit(T->data, level);
- PreOrderTraverse(T->lchild, level+1);
- PreOrderTraverse(T->rchild, level+1);
- }
- }
- int main()
- {
- int level = 1;
- BiTree T = NULL;
- CreateBiTree(&T);//为什么这里要用&,不能直接用T传进去吗?
- PreOrderTraverse(T, level);//这里又没有&了
-
- return 0;
- }
复制代码
CreateBiTree(&T); 这里为什么要用&T传进去,这样是算二级指针了吗
我把&这去掉,然后做了相应的修改,结果就没输出了,想了好久都不明白
还是因为我对指针不对了解吧,哪位大神可以详细的解释一下,O(∩_∩)O谢谢!!! |
最佳答案
查看完整内容
少年 函数的参数都是临时变量 指针类型的参数也是临时变量 二级指针的类型也是临时变量
函数调用的时候 会把这些参数由右向左 依次推进栈中
当函数调用完成后 这些参数会出栈 也就是临时变量消失了 生命周期结束
只不过当形参是二级指针的时候, 可以拿到一级指针的地址,
获得里某个变量的地址 自然就可以对其赋值并保证不被清空(在其生命周期内)
|