关于指针引用的问题
//创建一棵二叉树 输入结点时采用前序遍历的顺序void BiTree::Creat_BiTree(BiNode*&n)
{
char temp;
cin>>temp;
if('#'==temp)
{
n=NULL;
}
else
{
n=new BiNode;
n->data=temp;
Creat_BiTree(n->lchild);
Creat_BiTree(n->rchild);
}
}
传参时为什么用的是指针的引用?不用引用可不可以?求详解 BiNode的定义: struct BiNode{char data;BiNode *lchild,*rchild;}; 本帖最后由 rowang 于 2016-5-7 12:43 编辑
就这一段代码所要实现的功能来看,还是需要使用引用的。
为什么呢?在这儿,BiNode的指针类型 即代表了一棵树,而这个函数是建树的过程,也就是我们要修改说这棵树的内容,所以自然要用引用,否则就是在修改局部变量而对传入的树毫无影响。
或许可以采用更清楚一些的写法来解释:
typedef BiNode* Tree;
void Create_BiTree(Tree &T){ // 在本程序中,如果这里不加引用,main函数中的myTree无法成功建起来。
// pass;
}
int main(){
Tree myTree;
Create_BiTree(myTree);
return 0;
}
PS:贴代码时请使用代码格式 rowang 发表于 2016-5-7 12:41
就这一段代码所要实现的功能来看,还是需要使用引用的。
为什么呢?在这儿,BiNode的指针类型 即代表了 ...
我明白了,我刚开始没把值传递和址传递理解清楚,值传递不能改变原值 游啊游 发表于 2016-5-7 13:34
我明白了,我刚开始没把值传递和址传递理解清楚,值传递不能改变原值
也许这种写法叫 引用传递 更恰当?我觉得说起地址传递是这样子吧:
void Create_BiTree(Tree *T){
// pass;
} 嗯嗯
页:
[1]