
Si vous avez commencé votre parcours de codage avec Python ou JavaScript, les "pointeurs" peuvent sembler être une magie obscure réservée aux ingénieurs systèmes barbus. Même si vous avez appris le C++ à l'université, vous vous souvenez probablement avoir lutté avec des erreurs de segmentation et des fuites de mémoire.
Mais voici le secret : un pointeur est juste une variable. Ce n'est pas magique. C'est un nombre. Ce nombre se trouve juste être l'adresse de quelque chose d'autre.
Pour vraiment comprendre les pointeurs, nous devons d'abord parler de l'endroit où vos données vivent réellement.
Lorsque votre code s'exécute, vos données doivent aller quelque part. Généralement, elles atterrissent dans l'un des deux endroits suivants : la Pile ou le Tas.
Imaginez la Pile comme une pile de post-it sur votre bureau.
Si vous avez une variable int a = 10;, elle se trouve probablement ici. C'est propre, rapide et sûr.
Le Tas est un entrepôt géant.
Un pointeur est simplement un panneau indicateur.
Si vous avez une variable score = 99 sur le Tas (à l'adresse 0x1234), un pointeur est juste une minuscule 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 (où est-ce ?).*p est la valeur (qu'y a-t-il à l'intérieur ?).Pourquoi ne pas simplement passer des valeurs et laisser le langage gérer le désordre ?
Imaginez que vous avez une image de 10 Mo. Si vous la passez à une fonction process(image), et que votre langage copie cette image, vous venez de gaspiller 10 Mo de RAM et du temps CPU à copier des pixels.
Avec un pointeur, vous passez juste l'adresse (8 octets). Vous dites à la fonction : "L'image est là-bas, va la voir."
Si vous passez une variable par valeur à une fonction, la fonction reçoit un clone. Si elle modifie le clone, l'original reste intact. Si vous passez un pointeur, la fonction sait où vit l'original. Elle peut modifier les données réelles.
Les listes chaînées, les arbres, les graphes—ce ne sont que des morceaux de données contenant des pointeurs vers d'autres morceaux de données. Vous ne pouvez pas les construire facilement sans références.
Les pointeurs ne sont pas gratuits.
Les pointeurs sont le pont entre votre code et le matériel. Même si vous écrivez du JavaScript ou du Python de haut niveau, comprendre que les objets sont juste des références (des pointeurs !) sous le capot vous aide à comprendre pourquoi a = b pourrait ne pas copier b, mais juste pointer a vers les mêmes données.
Maîtriser les pointeurs vous donne une vision rayon-X sur la façon dont votre code s'exécute. Vous arrêtez de voir de la "magie" et commencez à voir de la mémoire.
© Melvin Laplanche - All rights reserved.