鱼C论坛

 找回密码
 立即注册
查看: 1588|回复: 6

关于指针引用的问题

[复制链接]
发表于 2016-5-7 10:57:39 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//创建一棵二叉树 输入结点时采用前序遍历的顺序

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);
    }
}

传参时为什么用的是指针的引用?不用引用可不可以?求详解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-7 11:07:04 From FishC Mobile | 显示全部楼层
BiNode的定义:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 11:08:50 From FishC Mobile | 显示全部楼层
struct BiNode{char data;  BiNode *lchild,*rchild;};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-7 12:41:30 | 显示全部楼层
本帖最后由 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:贴代码时请使用代码格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 13:34:47 From FishC Mobile | 显示全部楼层
rowang 发表于 2016-5-7 12:41
就这一段代码所要实现的功能来看,还是需要使用引用的。

为什么呢?在这儿,BiNode的指针类型 即代表了 ...

我明白了,我刚开始没把值传递和址传递理解清楚,值传递不能改变原值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-7 14:23:44 | 显示全部楼层
游啊游 发表于 2016-5-7 13:34
我明白了,我刚开始没把值传递和址传递理解清楚,值传递不能改变原值

也许这种写法叫 引用传递 更恰当?我觉得说起地址传递是这样子吧:
void Create_BiTree(Tree *T){
    // pass;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 21:11:42 From FishC Mobile | 显示全部楼层
嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表