En C, vous pouvez avoir plusieurs pointeurs visant tous exactement le même emplacement mémoire. Ce n’est pas un bug. C’est une fonctionnalité.
Vous pouvez déclarer trois pointeurs entiers : p, q et r. Ensuite, vous pouvez tous les configurer pour qu’ils pointent vers la même variable entière « i ».
Voyez ce qui se passe ici. p obtient l’adresse de i. q obtient également l’adresse de i. r obtient tout ce que p contient. C’est l’adresse du « i ».
Une fois ce code exécuté, vous vous retrouvez dans une situation étrange. « i » a maintenant quatre noms. Vous pouvez y accéder en utilisant i, *p, *q ou *r. Ils font tous référence au même endroit dans la RAM.
Comment fonctionne l’attribution de pointeurs
Lorsque vous attribuez un pointeur à un autre, vous ne copiez pas la valeur vers laquelle il pointe. Vous copiez l’adresse.
r = p ne copie pas l’entier i. Il copie l’adresse mémoire stockée dans p. Puisque p contient l’adresse de i, r contient désormais également l’adresse de i.
Il n’y a pas de limite au nombre de pointeurs pouvant partager une même adresse. Vous pourriez avoir dix indicateurs. Ou cent. Ils soulignent tous simplement la même chose.
Pourquoi c’est important
Ce comportement change votre façon de penser les données. Une seule variable en mémoire peut avoir plusieurs alias. Si vous modifiez la valeur via un pointeur, tous les autres pointeurs voient le changement.
Maintenant, « i » vaut 10. « q » vaut 10. « r » vaut 10. Ils examinent tous les mêmes données.
C’est utile. Il vous permet de transmettre des références à des fonctions sans copier de grandes structures. Il permet à différentes parties de votre code d’opérer sur les mêmes données. Mais cela signifie aussi qu’il faut être prudent. Changer un pointeur peut en affecter d’autres.
Idées fausses courantes
Certains débutants pensent que l’attribution de pointeurs copie les données. Ce n’est pas le cas. Il copie l’adresse.
D’autres se demandent s’il y a une limite. Il n’y en a pas. Le langage vous permet de créer autant de pointeurs que nécessaire. Le compilateur ne vous arrête pas.
Le résultat
Plusieurs pointeurs peuvent pointer vers la même adresse. Il s’agit du comportement standard du C. Vous pouvez attribuer des pointeurs les uns aux autres. L’adresse est copiée, pas la valeur. La variable reste la même. Les noms ne font que se multiplier.
“Il n’y a pas de limite au nombre de pointeurs pouvant contenir (et donc pointer vers) la même adresse.”
Cette flexibilité est puissante. Cela demande de la discipline. Mais c’est fondamental dans le fonctionnement de C. Si vous comprenez cela, vous comprenez un concept fondamental de la gestion de la mémoire en C.


























