C 需要更好的解释为什么我们在二进制搜索中使用指向指针的指针
我只是想更好地理解指向指针的指针,在互联网上我发现了一个二进制搜索的例子,开发者在插入函数中使用指向指针的指针 我的问题是:C 需要更好的解释为什么我们在二进制搜索中使用指向指针的指针,c,pointers,C,Pointers,我只是想更好地理解指向指针的指针,在互联网上我发现了一个二进制搜索的例子,开发者在插入函数中使用指向指针的指针 我的问题是: 与其他使用单指针的BST代码相比,下面的代码有什么优势 在insert函数的末尾,代码使用递归方法,但我不理解在insert(&(*tree)->right,item)中使用&的语法 insert函数如下所示: void insert(node ** tree, node * item) { if(!(*tree)) {
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);
}
void插入(节点**树,节点*项)
{
如果(!(*树))
{
*树=项目;
返回;
}
如果(项目->阀门)
插入(&(*树)->左侧,项目);
否则如果(项目->val>(*树)->val)
插入(&(*树)->右侧,项目);
}
因为这一行,如果项目为空,它会将树
分配给项目,也就是说,它会启动一个新的树
*tree = item;
如果只获取一个节点*
,则无法为其分配一个从函数外部可见的新值。这是因为指针是按值传递的,因此insert
函数只需修改原始指针的副本即可
2) 在insert函数的末尾,代码使用递归方法,但我不理解使用“&”insert(&(*tree)->right,item)的语法
->
运算符的优先级比&
运算符的优先级高,因此它要传入*树->右
的地址,即下一行的节点**
。。我不能像struct node*insert(struct node*node,int data){if(node==NULL){return(newNode(data));}else{if(data data data)node->left=insert(node->left,data);else node->right=insert(node->right,data);return(node);}HI Ed S.感谢您的解释。你帮我消除了我的疑虑。总之,如果我们想更改该值,可以将该值作为指针传递到函数中。所以在相同的模式下,如果我们想改变指针,那么在这种情况下,我们必须将它作为指针的指针传递。希望我是对的。给像我这样的人更多的解释。。。。。。。。。。。。。听起来你已经知道了。由于所有内容都是按值传递的,因此如果希望调用方看到参数更改的值,则需要传递指针,这也适用于指针。