次のコードは、ポインターを理解する上で 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;
そうでない場合、なぜですか?