Почему эта функция поиска возвращает указатель на указатель?

#ifndef _BST_H_ /* Returns negative (leftright). */ typedef int comparator(void* left, void* right); struct bst_node { void* data; struct bst_node* left; struct bst_node* right; }; struct bst_node* new_node(void* data); void free_node(struct bst_node* node); struct bst_node** search(struct bst_node** root, comparator compare, void* data); void insert(struct bst_node** root, comparator compare, void* data); void delete(struct bst_node** node); #endif 

Это файл заголовка. Я не понимаю о функции search , почему node** возвращаемого типа node** ?

Отредактировано: добавлено search func here:

 struct bst_node** search(struct bst_node** root, comparator compare, void* data) { struct bst_node** node = root; while (*node != NULL) { int compare_result = compare(data, (*node)->data); if (compare_result left; else if (compare_result > 0) node = &(*node)->right; else break; } return node; } 

Я бы предположил, что функция возвращает указатель на указатель, так что ваша функция search может использоваться для реализации insert . Если search просто возвращает указатель на узел, а узел не найден, вам нужно снова пройти дерево, чтобы выяснить, какой указатель вам нужно переделать, чтобы сделать вставку. Если вместо этого он возвращает указатель на указатель узла, который в конечном итоге равен нулю, тогда insert может быть реализована путем просто переназначения этого указателя, чтобы указать на новый узел, который необходимо вставить.

Просто предположение.