kcorbel 2024-06-01 10:49 采纳率: 0%
浏览 1

为何函数参数中(TNode*& t)可以,但(Tree& t)报错?前面已经typedef TNode* Tree了。

为何函数参数中(TNode*& t)可以,但(Tree& t)报错?前面已经typedef TNode* Tree了。

img

  • 写回答

3条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    在这个问题中,(TNode*& t)和(Tree& t)的差异在于函数参数的类型。

    先来看一下函数参数(TNode*& t)的意义:它表示传入的是一个指向指针的引用。在函数内部,可以通过修改这个指针的值来改变调用函数时传入的指针。这种方式常用于修改指针本身或者通过指针来修改对象的值。

    而(Tree& t)表示传入的是一个引用对象。在函数内部不能通过修改t来改变调用函数时传入的对象t,因为它不是指针类型。引用对象本身不能被修改,只能通过引用来访问和操作。

    那么为什么在这个例子中(TNode*& t)可以,而(Tree& t)报错呢?

    这是因为在前面的代码中,使用typedef将TNode命名为Tree,所以Tree和TNode是等价的。因此,(TNode*& t)中的t实际上是一个指向指针的引用,可以通过修改这个指针来改变调用函数时传入的指针。但是(Tree& t)中的t是一个引用对象,不能通过引用来修改对象本身。

    解决方案:

    1. 修改函数参数类型为(TNode*& t)可以解决这个问题;
    2. 如果要使用(Tree& t)作为函数参数类型,需要修改typedef的定义。将TNode命名为Tree是一种不常见的做法,不推荐使用。可以考虑将typedef TNode Tree;改为typedef struct TreeNode* Tree;,这样定义时就明确了Tree是一个指向结构体TreeNode的指针类型。然后使用(Tree& t)作为函数参数类型,就不会报错了。
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月1日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题