qq_29523495 2021-11-23 10:22 采纳率: 75%
浏览 16
已结题

c++关于引用指针和指针作为参数调用的问题

c++ 关于引用指针的问题:(下面是代码)
在main函数中BiTree 只定义了T 而没有初始化。在createBITree中用指针传进来(BiTree T)会报错,没有初始化。 但是用引用传进来(BiTree &T
)就不会报错。这到底是为什么? 而且就算我在main中初始化了BiTree T = new BiTreeNode; 运行结果也不正确。想知道为什么。


typedef struct node
{
    struct node *lchild;
    struct node *rchild;
    char data;

}BiTreeNode, *BiTree; 

void createBiTree(BiTree T)
{
    char c;
    cin >> c;
    if ('#' == c)             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
        T = NULL;
    else
    {
        T = new BiTreeNode;
        T->data = c;
        createBiTree(T->lchild);
        createBiTree(T->rchild);
    }
}

void preTraverse(BiTree T)
{
    if (T)
    {
        cout << T->data << " ";
        preTraverse(T->lchild);
        preTraverse(T->rchild);
    }
}

int main()
{
    BiTree T ; 
    createBiTree(T);
    cout << "前序遍历二叉树:" << endl;
    preTraverse(T);
    postTraverse(T);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • bostonAlen 2021-11-23 10:52
    关注

    传引用,形参就是实参。
    就直接对T操作。
    传指针,实参T未被修改。
    此时你得传递实参的指针或者引用,才能修改实参,
    createBiTree(BitTree *)
    调用时
    BiTree *T ;
    createBiTree(T);
    才能把T的值从函数中传出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装