为什么我们使用&QUOT

为什么我们使用&QUOT

本文介绍了为什么我们使用"及(*"当双指针结构是一个函数的参数声明?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

void instert(NODE**root, int value)
{
    ...
    insert(&(*root)->left,value);
    ...
}

void search(NODE*root, int value)
{
    ...
    search(root->left, value);
    ...
}

为什么我们用&放大器;此处插入(及(*根) - >左值);
但是,我们不使用&放大器;在这里:搜索(根 - >左值);

Why we use "&" here: insert(&(*root)->left,value);But we do not use "&" here: search(root->left, value);

推荐答案

额外的间接水平将被添加到插入功能,这样就可以修改指针。这是没有必要在搜索功能的情况下,因为它永远不会改变传递给它的指针。

An extra level of indirection is added to insert function so that it could modify the pointer. This is not necessary in case of the search function, because it never modifies the pointer passed to it.

具体而言,需要有在插入函数,它是这样的一个地方:

Specifically, there needs to be a place in the insert function that does something like this:

*root = malloc(sizeof(NODE));
(*root)->left = NULL;
(*root)->right = NULL;
(*root)->value = value;

这将修改其由指针指针指向的指针。

This would modify the pointer which is pointed to by the pointer to pointer.

请注意,有可能从返回指针的新值插入,这样避免间接的这种额外的级别:

Note that it is possible to avoid this extra level of indirection by returning the new value of the pointer from insert, like this:

NODE* insert(NODE*root, int value) {
    ...
    root->left = insert(root->left, value);
    ...
}

但是,这改变了所有呼叫者必须调用方式插入,其中包括顶级来电者:而不是写

However, this changes the way in which all callers must call insert, including the top-level caller: rather than writing

insert(&root, value);

他将被迫写

root = insert(root, value);

这篇关于为什么我们使用"及(*"当双指针结构是一个函数的参数声明?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 08:39