Локальные переменные в C ++ (хранящиеся в стеке) имеют область видимости блока, т. Е. Они выходят за пределы области видимости после выполнения блока, в котором они определены.
Когда вы передаете указатель нафункция, копия указателя создается и эта копия является то, что передается.Как только функция выполняется, переменные в рабочем пространстве функции выходят из области видимости.Любые нестатические автоматические переменные, созданные внутри функции, уничтожаются.
Когда вы передаете по ссылке, вы не передаете копию переменной, а передаете фактическую переменную, поэтому любые изменения, внесенные в переменную, отражаются на фактической переменной, переданной в функцию (ссылка).
Я хотел бы отметить, что указатель на следующий узел хранится в памяти и имеет адрес, где он хранится.Поэтому, если вы не хотите передавать по ссылке, вы можете сделать это:
- Использовать указатель на указатель, который указывает на область памяти, в которой хранится переменная (адрес) указателя для следующего узла
- Передайте это функции (не по ссылке)
- Разыменуйте указатель и сохраните новый адрес, на который вы хотите указать.
Я знаю, что этонемного запутанно, но посмотрите на этот небольшой фрагмент кода, который добавляет узел в связанный список.
void addNode(Node** head, int newData)
{
Node* newNode = new Node;
newNode->data = newData; // Can also be done using (*newNode).data
newNode->next = *head;
*head = newNode;
}