указатели — и звездочка, и амперсанд в параметре Stack Overflow

Я читаю книгу о бинарном дереве поиска и что-то странное пришло в голову.

class BST
{
public:
void insert(const Comparable & item)

private:
BinaryNode *root;
struct BinaryNode
{
Comparable element;
BinaryNode *left;
BinaryNode *right;
BinaryNode(const Comparable & theElement, BinaryNode *lt, BinaryNode *rt) :
element(theElement), left(lt), right(rt) {}
}
void insert(const Comparable & item, BinaryNode * & t) const;
};

private insert функция является вспомогательной функцией для public insert функция и private insert Функция ищет правильное место для вставки с использованием рекурсии.

Часть, которую я не понимаю, это BinaryNode * & t в параметре. Что это значит?
Указатель адреса t?

11

Решение

В вашем выражении BinaryNode * & t)

            BinaryNode*                & t
-------------              -----
BinaryNode pointer        t is reference variable

так t ссылка на указатель BinaryNode учебный класс.

Указатель адреса т?

Ты смущен ampersand & оператор в с ++. которые дают адрес переменной. но синтаксис другой.

ampersand & перед некоторыми из переменных, как показано ниже:

BinaryNode b;
BinaryNode* ptr = &b;

Но следующий путь для ссылочной переменной (просто не указатель):

BinaryNode b;
BinaryNode & t  = b;

и ваш, как показано ниже:

BinaryNode b;
BinaryNode* ptr = &b;
BinaryNode* &t  = ptr;
12

Другие решения

Это ссылка на указатель, вы можете изменить указатель в этой функции, и он будет изменен снаружи.
Простой пример http://liveworkspace.org/code/1EfD0Q$ 8

2

По вопросам рекламы [email protected]