Я создаю небольшой класс дерева AVL в C++, и я немного перепутал с указателями здесь, и его действие довольно странно.Почему мои указатели на C++ внезапно расходятся?
В классе У меня есть переменная с именем «root», которая является указателем на узел. В какой-то момент, я передать указатель этого объекта в следующей функции:
template <class T> void AVL<T>::RRotate(Node ** node) {
std::cout << this->root << std::endl << *node << std::endl;
*node = (*node)->left;
std::cout << this->root << std::endl << *node;
}
(Обратите внимание, что «левый» является полем, которое содержит указатель на узел).
Теперь первая печать всегда печатает одну и ту же ячейку памяти.
Однако второй вызов будет печатать другой каталог для этого -> root и * node.
Почему это? Когда я устанавливаю «* node = (* node) -> left;», не следует ли это изменять этот-> корень, так как узел - это просто указатель на этот указатель?
Я немного растерялся.
Любая помощь приветствуется!
EDIT: Выходной образец следующим образом:
0x902a88
0x902a88
0x902a88
0x902aa8
РЕДАКТИРОВАТЬ 2: Распечатка & this-> root и node вместо этого показывают, что они всегда имеют одинаковое значение, поэтому он выглядит так, что указатель указывает на нужное место.
Как вы называете эту функцию? – Inspired
Буквально только это-> RRotate (node) (где узел задан как указатель на корень) – Cisplatin
Почему вы используете Node **? Предположительно, чтобы мутировать указатель. Таким образом, я бы ожидал, что вы назовете это как> RRotate (& node). – seanmcl