C a une bizarrerie qui fait trébucher les débutants mais alimente des systèmes complexes. Vous pouvez pointer des dizaines de pointeurs vers la même adresse mémoire.
Considérons un simple entier « i ». Vous pouvez déclarer trois pointeurs — p, q et r — et les lier tous à celui-ci.
Ce n’est pas magique. C’est juste une copie d’adresse. Lorsque vous écrivez « r = p », le compilateur copie l’adresse détenue par « p » dans « r ». La même chose se produit avec « q ».
Maintenant, « je » a quatre noms. C’est « je ». C’est *p. C’est *q. C’est *r.
Il n’y a pas de limite stricte à ce sujet. Vous pouvez avoir des centaines de pointeurs faisant référence au même morceau de RAM. Chacune est une variable distincte dans votre code, mais elles sont toutes résolues exactement au même emplacement en mémoire.
C’est pourquoi les modifications apportées via un pointeur affectent tous les autres. Modifier *p ? La valeur à cette adresse change également pour « q » et « r ». C’est une vue directe sur les mêmes données.
Pourquoi est-ce important ? Parce que cela permet l’alias. Votre programme peut examiner les mêmes données sous différents angles. Un pointeur pourrait le traiter comme une structure. Un autre pourrait le traiter comme un tableau d’octets bruts. Les données ne changent pas. L’interprétation le fait.
Cette flexibilité est puissante. C’est aussi là que se cachent les bugs. Si vous perdez la trace de l’emplacement du pointeur, vous risquez d’écraser des données que vous ne vouliez pas. Mais pour l’instant, n’oubliez pas : les pointeurs ne sont que des adresses. Et les adresses peuvent être partagées.




















