
Si tu as commencé avec Python ou JavaScript, les pointeurs ressemblent à une magie obscure réservée aux ingénieurs système à la barbe grise. Si tu as appris le C++ à l'université, tu te souviens des batailles contre les segfaults et les fuites mémoire.
Voici le secret. Un pointeur est une variable. Sa valeur est un nombre. Ce nombre contient l'adresse de quelque chose d'autre.
Pour comprendre les pointeurs, il faut d'abord savoir où vivent tes données.
Quand ton code s'exécute, tes données doivent aller quelque part. Elles atterrissent dans la pile ou dans le tas.
Imagine la pile comme un tas de notes autocollantes sur ton bureau.
Si tu as une variable int a = 10;, elle vit en général ici. C'est rapide et sûr.
Le tas est un immense entrepôt.
Un pointeur est simplement un panneau indicateur.
Si tu as une variable score = 99 sur le tas (à l'adresse 0x1234), un pointeur est une petite variable sur la pile qui dit "Les données sont à 0x1234".
int score = 99; // La valeur réelle
int *p = &score; // Le pointeur 'p' contient l'adresse de 'score'p est l'adresse. Elle te dit où se trouvent les données. *p est la valeur, ce qui est stocké à cette adresse.
Pourquoi ne pas se contenter de passer les valeurs et laisser le langage gérer le désordre ?
Imagine une image de 10 Mo. Tu la passes à une fonction process(image) et ton langage la copie. Tu viens de gaspiller 10 Mo de RAM et du temps de CPU à copier des pixels. Avec un pointeur, tu passes l'adresse (8 octets). La fonction sait où est l'image et va la regarder.
Tu passes une variable par valeur et la fonction reçoit un clone. Modifier le clone laisse l'original intact. Avec un pointeur, la fonction sait où vit l'original. Elle peut modifier la donnée réelle.
Les listes chaînées, les arbres et les graphes sont des morceaux de données qui contiennent des pointeurs vers d'autres morceaux. Tu ne peux pas les construire facilement sans références.
Les pointeurs ne sont pas gratuits.
Les pointeurs sont le pont entre ton code et le matériel. Même quand tu écris du JavaScript ou du Python haut niveau, les objets que tu manipules sont des références sous le capot. C'est pour ça que a = b pointe a vers les mêmes données que b.
© Melvin Laplanche - All rights reserved.