在最近的Slashdot访谈中, Linus Torvalds给出了一个例子,说明一些人如何使用指针,表明他们并不真正理解如何正确使用它们.
不幸的是,由于我是他所谈论的人之一,我也不理解他的例子:
我见过太多人通过跟踪"prev"条目删除单链表项,然后删除条目,做类似的事情
Run Code Online (Sandbox Code Playgroud)if (prev) prev->next = entry->next; else list_head = entry->next;每当我看到这样的代码时,我就会去"这个人不理解指针".而且很遗憾很常见.理解指针的人只使用"指向条目指针的指针",并使用list_head的地址初始化它.然后当他们遍历列表时,他们可以在不使用任何条件的情况下删除条目,只需执行即可
Run Code Online (Sandbox Code Playgroud)*pp = entry->next
有人可以提供更多解释为什么这种方法更好,以及它如何在没有条件声明的情况下工作?