Разница между узлом = узел-> следующий против * узел = * (узел-> следующий)? - PullRequest
0 голосов
/ 28 апреля 2020

В чем разница между этими двумя строками кода C?

node = node->next; 
*node = *(node->next);

node является структурой узла связанного списка, которая определяется следующим образом:

struct Node{
     int data;
     Node* next;
};

Node* node;

Ответы [ 3 ]

5 голосов
/ 28 апреля 2020

Первый фрагмент кода, node = node->next;, является назначением указатель . То есть значение адреса, которое в настоящее время находится в node, будет заменено на адрес, который находится в node->next.

Второй фрагмент, *node = *(node->next);, разыменовывает указатели, и копирует фактические данные структуры, на которую указывает RHS, в структуру, на которую указывает LHS. Это будет эквивалентно следующему:

node->data = node->next->data;
node->next = node->next->next;

Примечание. Во втором случае адрес, который содержит node, не изменяется; то есть он все еще указывает на то же место в памяти, но содержимое этой памяти будет изменено. В первом случае node будет указывать на другое (возможно) место в памяти, а содержимое старого места останется нетронутым.

1 голос
/ 28 апреля 2020

указатель против значений. Первым вы назначаете указатель node указателю на node->next. Во втором случае вы разыменовываете значение *(node->next), то есть вы берете его значение и присваиваете его значению в узле.

1 голос
/ 28 апреля 2020
node = node->next;

Вы назначаете указатель на указатель.

*node = *(node->next);

Это разыменование указателя. Он присваивает значение node значению следующего узла node->next.

Посмотрите на рисунок ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...