C реализация бинарного дерева поиска
Я пытался реализовать bst, в C. Я думаю, что я почти там, но в моей функции add node я создаю временный узел под названием current для хранения текущего узла, который посещается в дереве. Затем, когда я изменяю текущий узел, мой исходный указатель не изменяется после завершения функции.
Я читал об этом, и я думаю, что мне может понадобиться указатель указателя, но я все еще не совсем знаю, как обновить оригинальную структуру.
1 ответ:
Вы правы, что проблема связана с указателем на указатель в
bstlist_add
. Вот пример, который поможет вам понять, что нужно изменить в коде.int a=10; int b=20; void noChange(int * pSomeInt); void change(int ** ppSomeInt); int main(int argc,char * argv[]) { int * pMainInt=&a; noChange(pMainInt); //pMainInt will still point to a //since the parameter to change is int **, we have to use & here change(&pMainInt); //pMainInt now points to b return 0; } void noChange(int * pSomeInt) { //while pSomeInt is a pointer, it is a copy of pMainInt, not a pointer to it //so this creates a pointer to the parameter, pSomeInt, itself int ** ppSomeInt=&pSomeInt; //so this changes the parameter, pSomeInt *ppSomeInt=&b; } void change(int ** ppSomeInt) { //ppSomeInt is a pointer to pMainInt, which is itself an int * //so *ppSomeInt is pMainInt and not a copy of it *ppSomeInt=&b; }