C++ 指针和指向引用的指针

2023-12-26

我正在尝试创建一个二叉搜索树。我使用递归过程将节点插入树中。代码如下。

void BST :: insertRoot(Node* node, int data)    {
    if (node == NULL)
        this -> root = new Node(data);
    else
        insertOthers(node, data);
}
void BST :: insertOthers(Node* node, int data)  {
    if(node == NULL)    {
            node = new Node(data);
            return;
    }
    if(data < node->getData())
        insertOthers(node->getLeft(), data);
    else
        insertOthers(node->getRight(), data);
}

在此代码中,只有一个节点被插入到树中,然后连接就被断开。然而当我改变我的Node* to Node*&它工作完美。我仍然不明白这两者之间有什么区别。谁能用它们的内存映射解释这两者之间的区别?谢谢


如果按值获取指针参数:

Node* node

然后修改它:

node = new Node(data);

将更改函数内的局部变量;但不是调用者的论点。这个新值将会丢失,而树将保持原样。

通过引用传递(这是对指针的引用,而不是对引用的指针):

Node*& node

意味着本地参数引用与调用者的参数相同的指针,因此调用者将看到新值的更改。因此,假设其余逻辑是正确的,这将根据您的需要更新树中的指针以指向新节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 指针和指向引用的指针 的相关文章

随机推荐

  • Powershell:二维数组

    以下内容按预期工作 values a b c d foreach value in values write host Value 0 value 0 write host Value 1 value 1 结果 1 Value 0 a Va
  • 用Java正则表达式递归替换?

    我可以更换ABC 10 5 with 10 5 using replaceAll ABC 1 2 但我不知道该怎么做ABC ABC 20 2 5 or ABC ABC 30 2 3 2 如果我能够转换为 20 2 5我怎样才能转换回ABC
  • 内省模块类时“#map(&proc)”习惯用法如何工作?

    介绍成语 我找到了一个有趣但无法解释的替代方案 https stackoverflow com a 3680719 1301972到一个被接受的答案 该代码显然可以在 REPL 中运行 例如 module Foo class Bar def
  • 如何在 Spring Boot 中向静态资源添加 Cache-Control 标头?

    我怎样才能添加Cache ControlSpring Boot 中静态资源的 HTTP 标头 尝试在应用程序中使用过滤器组件 它可以正确写入标头 但是Cache Control标头被覆盖 Component public class Cac
  • .NET - 使用类库存储 App.config

    网上似乎有很多人问这个问题 但到目前为止我的研究还没有得出解决方案 而且 至少目前 我还没有接受 这是不可能的 作为解决方案 简而言之 我想要做的就是在 NET 类库项目中拥有一个配置文件 该文件在任何引用该类库的应用程序中都可用 我的设置
  • 我应该为 C 中的 erand48() 使用什么种子值?

    我是 C 编程新手 我读到 erand48 是线程安全随机数生成的一个不错的选择 然而 该函数采用的种子值为 unsigned Short int array 3 关于这个种子值应该初始化为什么有什么建议吗 好吧 首先 让我澄清一下 PRN
  • 使用 PIL 加载 RGBA 位图

    我尝试使用 PIL 将 32 位位图转换为 32 位 PNG from PIL import Image im Image open example bmp print im mode it prints RGB but expected
  • 经过身份验证的播放请求的 parse.json

    我在我的应用程序中设置了身份验证 如下所示 在提供用户名且 API 密钥为 123 时始终允许 object Auth def IsAuthenticated block gt String gt Request AnyContent gt
  • 反序列化时 C# 类中的字段初始值设定项不运行

    我有一个定义受保护字段的类 受保护的字段有一个字段初始值设定项 当我反序列化具体类时 字段初始值设定项不会运行 为什么 解决问题的最佳模式是什么 如果我将初始化移至构造函数中 则也不会调用构造函数 DataContract public c
  • impl Stream 无法取消固定

    我正在尝试使用获取数据crates io api https docs rs crates io api 0 7 0 crates io api 我尝试从流中获取数据 但是 我无法让它工作 AsyncClient all crates ht
  • jQuery 日期选择器显示格式

    我有带有日期字段 yy mm dd 的 MySQL 表 我有带有日期选择器的表单可以对其进行编辑并且工作正常 但在前端日期显示为 mm dd yy 这可能会令人困惑 我希望带有日期选择器的字段将值显示为 mm dd yy 但实际值应该采用旧
  • 将 List 转换为 char[],然后转换为 String

    我尝试过以下方法 List
  • Cuda 内核返回向量

    我有一个单词列表 我的目标是匹配一个非常非常长的短语中的每个单词 我在匹配每个单词时没有问题 我唯一的问题是返回包含每个匹配信息的结构向量 In code typedef struct int A B C Match global void
  • GitHub Pages 网站不会加载除 minima 之外的任何主题

    Versions Windows 10 0 19044 2364ruby 3 1 3p185 2022 11 24 修订版 1a6b16756e x64 mingw ucrt 宝石 v3 3 26杰基尔4 3 1 Problem 我的 Ge
  • Visual Studio 不会编译带有 *.inl 实现的模板类

    我正在关注一本关于 SFML 游戏开发的书 但我被困在第二章 因为我无法编译我刚刚编写的代码 它几乎是从书中逐字复制 除了成员变量名称和异常文本 我有使用 C 和模板的经验 但我以前从未见过这个错误 而且我已经盯着它看了几个小时了 我没有发
  • cv2.waitKey(1) & 0xff == ord('q') 如何工作?

    这条线如何运作 据我所知 到目前为止 输出cv2 waitKey number 对于所有的每一个int数字是 1 and 0xff是一个十六进制数 等于255以十进制数字表示 1 0xff等于255以十进制数字表示 Also ord q 等
  • 在后台线程上构建 UIView

    我知道 UI 应该只在主线程上更新 但是是否可以在单独的线程上创建和添加子视图 只要它们不添加到可见视图中 会导致内存和性能问题吗 这是一些示例代码 NSOperationQueue queue NSOperationQueue alloc
  • 使用 Spring MVC RequestMappingHandlerMapping 和 Spring Websocket 的 ServletWebSocketHandlerRegistry 处理相同的 URL

    我想要拥有什么 客户端发送GET HTTP 1 1 没有Connection upgrade 该请求应由RequestMappingHandlerMapping 客户端发送Connection upgrade与 GET 请求一起 该请求应该
  • Oracle SQL:为什么我的函数输出 null?

    CREATE OR REPLACE FUNCTION get status by member id p member id NUMBER RETURN CHAR AS v status CHAR 1 BEGIN select status
  • C++ 指针和指向引用的指针

    我正在尝试创建一个二叉搜索树 我使用递归过程将节点插入树中 代码如下 void BST insertRoot Node node int data if node NULL this gt root new Node data else i