为何函数参数中(TNode*& t)可以,但(Tree& t)报错?前面已经typedef TNode* Tree了。
3条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-06-01 10:49关注
上午好☀️☀️☀️️
本答案参考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是一个引用对象,不能通过引用来修改对象本身。
解决方案:
- 修改函数参数类型为(TNode*& t)可以解决这个问题;
- 如果要使用(Tree& t)作为函数参数类型,需要修改typedef的定义。将TNode命名为Tree是一种不常见的做法,不推荐使用。可以考虑将typedef TNode Tree;改为typedef struct TreeNode* Tree;,这样定义时就明确了Tree是一个指向结构体TreeNode的指针类型。然后使用(Tree& t)作为函数参数类型,就不会报错了。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 易优eyoucms关于二级栏目调用的问题
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题