Bonjour, bienvenue pour ce premier épisode de zenm4 :
Les listes chaînées
Pour cet épisode pilote, parlons d’un point douloureux du langage C.
Le C a un avantage pédagogique : comme il vous donne à peine assez d’outils pour travailler, vous êtes obligés de tout faire vous-mêmes et d’apprendre comment marche ce qu’il y a “en dessous” (système, C, UNIX).
Lors de l’apprentissage du C, un des premiers blocages que je vois souvent et qui impressionne les gens est celui de la liste chaînée. Cela fait appel à des concepts simples mais qui à ce moment-là de l’apprentissage sont souvent confus : les mélanger, c’est la catastrophe.
Une variable
Une variable est une boîte, ou une étiquette. On y range des choses qu’on récupère plus tard en “rappelant” le nom qu’on avait utilisé. Quand on y range autre chose, on “oublie”, perd, écrase ce qu’il y avait.
Dans certains langages, ces boîtes sont typées : on ne peut y mettre que des couteaux, ou que des fourchettes. Dans d’autres, pas de contraintes.
Attention : Cette approximation du type est grossière et largement fausse !
Un pointeur
Un pointeur c’est comme un numéro de téléphone. Personne n’a jamais
confondu le numéro avec la personne, alors pourquoi avoir peur dès que
ça parle de code ? En C, avec
int valeur = 42;
int* pointeur = &valeur
Vous avez le nombre 42 dans valeur
, rangé à l’adresse mémoire
&valeur
. Le pointeur pointeur
est le numéro de téléphone, et
*pointeur
son contenu : quand on regarde la valeur de pointeur
on
n’a qu’un numéro, mais quand on regarde *pointeur
on retombe sur le
contenu : 42
.
ERRATUM (@vdwxv) : je dis “chiffre” mais il faut bien sûr comprendre “nombre”.
Une liste chaînée
Vous souhaitez maintenant contacter Dave. Vous n’avez pas son numéro, mais vous savez que quelqu’un dans le cercle d’amis l’a. Vous appelez Alice, qui a le numéro de Bob, qui a celui de Carole, qui a celui de Dave.
Vous pouvez maintenant parler à Dave.
Bien sûr, je ne parle ici que des chaînons. Le principe d’une liste c’est que vous rangez quelque chose dedans : vous vous préparez alors à travailler sur une structure qui a une “charge utile”, par exemple le livre que vous avez prêté, et bien sûr le lien vers la prochaine personne à qui elle aurait pu prêter votre livre.
Pour récupérer votre livre, vous allez donc appeler Alice, qui ne l’a plus car elle l’a prêté à Bob, qui l’a prêté à Carole etc. Au bout d’un moment, la recherche s’arrête : soit vous trouvez que Dave a le livre, soit il ne l’a pas mais ne sait plus qui appeler, et la recherche a échoué.
Ces sujets sont-ils complexes ? Pas pires qu’autre chose.
Le langage humain est complexe, et pourtant peu de gens se trompent. Quand on dit l’Élysée : c’est une adresse, un palais, le siège du pouvoir exécutif français, le président… on mélange tout cela et pourtant tout le monde comprend.
Alors, le code, c’est compliqué ?
Prenez soin de vous, soyez heureux !
Et pour vivre heureux, ne faisons plus de C.
Il ne devrait plus y avoir de C dans zenm4.
Merci et à bientôt !