下面是我从linus 获得的关于理解指针的代码。
typedef struct list_entry {
int val;
struct list_entry *next;
} list_entry;
list_entry **pp = &head; /* pointer to a pointer */
list_entry *entry = head;
while (entry) {
if (entry->val == to_remove)
*pp = entry->next; //6
pp = &entry->next; //8
entry = entry->next;
}
有人可以帮助理解第 6 行和第 8 行吗?如果 entry->val == to_remove,第 6 行被求值,*pp 成为删除后的下一个条目,那么第 8 行之后做什么?当前条目已被删除,如何在第 8 行重新使用该条目?
另外,我理解*pp表示指针pp的值,而&entry->next表示pp的地址,我总是对什么时候应该使用*,什么时候应该使用&感到困惑。具体来说,第 6 行可以是:
pp = &entry->next;
第 8 行是:
*pp= entry->next;
如果不是,为什么?