c - 需要更好的解释为什么我们在二分搜索中使用指向指针的指针

标签 c pointers

我只是想更好地理解指向指针的指针,在互联网上我发现了一个二分搜索的示例,其中开发人员在插入函数中使用了指向指针的指针。

我的问题是:

  1. 下面的代码与其他使用单指针的 BST 代码相比有什么优势?
  2. 在插入函数的末尾,代码使用了递归方法,但我不明白在 insert(&(*tree)->right, item 中使用 & 的语法);.

insert 函数如下所示:

 void insert(node ** tree, node * item)  
 {   
   if(!(*tree))  
   {  
        *tree = item;  
        return;  
   }  
   if(item->val<(*tree)->val)  
      insert(&(*tree)->left, item);  
   else if(item->val>(*tree)->val)  
      insert(&(*tree)->right, item);  
}  

最佳答案

因为这一行,如果 item 为 null,则将它分配给 item,即它启动一个新树。

*tree = item;

如果您只使用一个node*,那么您将无法为其分配从函数外部可见的新值。这是因为指针是通过传递的,因此insert函数只是修改原始值的副本。

2) at the end of insert function the code uses recursive method but I didnt understadn teh syntax of using "&" insert(&(*tree)->right, item);

-> 运算符的优先级高于 & 运算符,因此它传入 *tree->right 的地址>,即下一个节点。

关于c - 需要更好的解释为什么我们在二分搜索中使用指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569760/

相关文章:

c - 至于 struct , * . 和 -> 之间的区别

c - 在C中保存一个指针地址

c++ - 检查算术运算中的溢出条件

c - 释放 C 函数使用的内存时出错

c - 如何将数组的一部分从二维数组复制到 C 中的另一个数组

C++ 指针数组参数

C 将字符串文字与返回字符指针的函数进行比较

c - 正确的格式说明符以打印指针或地址?

c - 对于线程程序中的信号处理程序,fork(应该)是安全的吗?

c - RV32E 版本的软浮点方法,例如 __divdi3 和 __mulsi3