Je lisais le tcp/ip illustré v2 et confondu avec une série de codes sur le livre.Impossible de faire face à un pointeur inutile semble pointeur lorsque je lisais le code de base de BSD 4.4
struct ifnet{
struct ifnet * if_next;
……
}
est ici les informations de base de la structure qui peut vous aider à en apprendre davantage sur le problème
void if_attach(struct ifnet* ifp){
struct ifnet **p = &ifnet;
while(*p):
p = &((*p)->if_next);
*p = ifp;
pourquoi l'auteur a utilisé un pointeur vers pointeur dans cet endroit? Je promets que dans le texte restant, les p n'apparaissent plus jamais (ce qui signifie qu'il n'est jamais utilisé comme argument d'aucune fonction).
À mon avis, ce code peut être converti en ce
struct ifnet *p = ifnet;
while(p):
p = *p->if_next;
p = ifp;
Est-ce exact?
La variable 'p' est une variable locale. Si vous l'avez seulement comme 'struct ifnet * p' alors vous modifiez seulement cette variable locale, et ces changements seront perdus une fois la fonction terminée. En utilisant un pointeur sur un pointeur, changer '* p' modifie définitivement ce que' p' pointe vers. Dans ce cas, ajouter un noeud à une liste chaînée. –
thanku tant de bro – WaldenShen