#c #pointers #linked-list
#c #указатели #связанный список
Вопрос:
У меня есть 3 указателя:
Node* head;
Node* temp=head;
Node* p=new Node(2);
Теперь я назначаю:
temp->next=p
Будет ли изменен следующий заголовок?
head->next=?
Комментарии:
1. Ни
next
один изhead
них не будет изменен при записиtemp->next=p;
. Это может измениться, но для этого вы должны рассказать нам больше о том, как на самом деле выглядит ваша структура данных. Итак, реальный ответ: «он может / не может меняться в зависимости от того, какая у вас структура». Если кто-нибудь скажет вам «да» или «нет» со 100% гарантией, он / она будет лгать, поскольку вопрос является неполным, поскольку он не дает никакой информации о том, какNode
выглядит.2. Да, если
head
бы это действительно указывало на некоторую выделенную память,temp
указывало бы на ту же память.3. Если
head
указать наNode
объект,temp
будет указывать на тот жеNode
объект. Изменение этого объекта с помощью любого указателя изменяет этот объект.4. @JasonLiam Я не понимаю вашу аргументацию.
head
иtemp
указывайте на одну и ту же память независимо от того, как выглядит структура.head->next
иtemp->next
это одно и то же, поэтому любое назначениеtemp->next
изменитсяhead->temp
. 100% гарантия.5. Ключевое слово, которое вы должны искать, — это псевдоним .
Ответ №1:
Да, если head
бы это действительно указывало на некоторую выделенную память, temp
указывало бы на ту же память.
Пример:
#include <iostream>
struct Node {
Node(int X) : x(X) {}
int x;
Node* next;
};
int main() {
Node* head = new Node(1);
Node* temp = head; // temp points to the same memory as head
Node* p = new Node(2);
temp->next = p; // head->next is the same as temp->next
std::cout << head->next->x << 'n' // prints 2
delete head;
delete p;
}