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