Итак, я смотрел этот разговор Теда с Линусом Торвальдсом, в котором он обрисовал следующий пример:
https://www.youtube.com/watch?v=o8NPllzkFhE&t=14m26s
Я был заинтригован этим, поэтому я хотел написать это для себя:
void remove_node(node* entry) {
node** indirect = &head;
while (*indirect != entry) {
indirect = &(*indirect)->next;
}
*indirect = entry->next;
free(entry);
}
Я понимаю почти все это, но я глубоко смущен этой строкой:
indirect = &(*indirect)->next;
Кажется, что &(*indirect)
берет адрес разыменования indirect
, который, я думаю, уничтожит друг друга, и мы просто получим просто indirect
снова. Хотя это явно неверно, я не совсем понимаю, почему.
Если это не правильно (а это не так), возможно, я просто неправильно понимаю группировку / порядок операций, когда задействован ->
. Однако, как бы я ни пытался отделить его, он не работает одинаково:
node* blegh;
while (*indirect != entry) {
// Doesn't work.
blegh = (*indirect)->next;
indirect = &blegh;
}
Если бы кто-то мог помочь мне обернуть мой слабый мозг вокруг этого, это было бы очень ценно.