У меня есть код, в котором я объявляю указатель (с именем " удалено ") в виде структуры с именем DLINKED_LIST_NODE .
DLINKED_LIST_NODE curr = dlinked_list_goto_idx(list, idx, false);
DLINKED_LIST_NODE removed;
if(curr->next != NULL)
removed = curr->next;
else {
printf("Error @ dlinked_list_remove: No such index.\n");
exit(1);
}
dlinked_list_goto_idx просто возвращает начальную точку двойного связанного списка.Таким образом, удаляется заголовок списка.
Когда я отлаживаю код, dlinked_list_goto_idx возвращает сам список (который является начальным узлом), и я вижу его адрес.Затем удалено объявляется, и я снова вижу его адрес.
Прежде чем выполнить блок removed = curr->next;
, я вижу, что адрес удален фактически идентичен curr->next
.
Компилятор делает это, чтобы оптимизировать код, или я не вижу очевидных вещей?
Вот как это выглядит, когда я отлаживаюсь до точки, где объявлено Удалено .https://pasteboard.co/HHe6eQE.png
И это экран отладки, где вы можете увидеть curr->next
.https://pasteboard.co/HHe7dF8.png