В недавнем интервью Slashdot Линус Торвальдс привел пример того, как некоторые люди используют указатели таким образом, что они не понимают, как правильно их использовать.
К сожалению, поскольку я один из людей, о которых он говорит, я также не смог понять его пример:
Я видел слишком много людей, которые удаляют запись с одиночным соединением, отслеживая запись "prev", а затем удаляют запись, делая что-то вроде
if (prev) prev->next = entry->next; else list_head = entry->next;
и всякий раз, когда я вижу такой код, я просто иду "Этот человек не понимает указателей". И это, к сожалению, довольно распространено. Люди, которые понимают указатели, просто используют "указатель на указатель ввода" и инициализируют это с адресом list_head. И затем, когда они пересекают список, они могут удалить запись без каких-либо условностей, просто делая
*pp = entry->next
Может ли кто-нибудь дать немного больше объяснений, почему этот подход лучше, и как он может работать без условного заявления?