Bonjour à tous,
Je débute l'apprentissage du C et jusqu' ici tout ce passe bien mais je bloque sur une fonction de recherche d'élément dans une liste chaînée.
La fonction de mon cours est défini comme ceci:
en ayant défini au préalable:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 P_un_element rechercher_un element(P_un_element pliste, char *mot) { while(pliste) { if (strcmp(pliste->mot, mot) == 0) return pliste; pliste = pliste->suivant; } return NULL; }
Habituellement dans les autres exemples de fonction manipulant des listes chaînées j'ai pu voir qu'on créait un pointeur temporaire sur la liste et c'est l'adresse de celui-ci qu'on modifiait pendant les boucles et autres, par exemple dans l'exemple de ma focntion on aurait défini:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct _un_element *P_un_element typedef struct _un_element { char mot[30]; P_un_element suivant; } Un_element;
P_un_element temp = pliste
Ce que je n'arrive pas à comprendre c'est qu'ici on boucle directement sur pliste qui est à priori l'adresse du premier élément de notre liste.
A l'issue de la ponction pliste pointe donc sur l'élément recherché non?
Mais alors qu'est-ce qui pointe sur le début de la liste du coup? Si je veux reparcourir ma liste pour une raison ou une autre par quoi j'appel cette liste vu que *pliste ne pointe à priori plus sur le début de la liste mais un élément bien particulier de celle-ci.
Dans mon cours il y a bien une explication mais que je n'arrive pas à comprendre:
"Cette fonction modifie l'argument pliste, qui contient l'adresse du début de la liste. Cette variable contient une copie de cette adresse, la modifier est donc sans conséquence sur la liste initiale. ATTENTION si *pliste avait été modifié (ou un champ de pliste en utilisant l'écriture '->') cela aurait modifié la liste chaînée."
Donc certe la liste n'est pas modifié mais où est l'adresse du premier élément? Quelle est cette "copie" de l'adresse évoqué dans l'explication, et surtout ou la retrouvé??
Je suis sûr que la réponse est toute simple et que c'est moi qui doit avoir mal compris un concept dans les pointeurs ou les structures mais après quelque recherche je n'arrive vraiment pas à comprendre^^
Merci de votre aide!
Partager