Il est très important de distinguer les pointeurs, qui sont des adresses mémoire, des références qui sont des variables de types très divers. On notera en particulier que les pointeurs sont tous formellement identiques, bien que lécriture suivante soit interdite :
char *p; int *q = p; // interdit, types de pointeurs différents
pour des raisons de précautions ; il faut écrire :
char *p; int *q = (int*) p;
cest-à-dire utiliser un changement de type, afin que le compilateur accepte laffectation ; dans ce cas, p et q ont exactement la même valeur : les modifications apportées à *p
, cest-à-dire à lemplacement de mémoire pointé par p, se répercuteront donc forcément sur *q
, puisquil sagit de la même place mémoire. On a donc ainsi une partie de la mémoire accessible de deux façons différentes (comme avec les références), mais sous deux types différents aussi (contrairement aux références). En général, de tels comportements ne sont pas souhaitables.
Le schéma suivant illustre la différence entre pointeur et référence. On suppose les déclarations suivantes :
double d = 1.2, &dd = d, *p = &d;
dune variable de type double
(huit octets en mémoire à ladresse 1000 par exemple), dune référence dd (aucun octet puisquil sagit de la même variable) et dun pointeur (deux octets pour un pointeur court, à ladresse 2000 par exemple). Voici donc létat de la mémoire (chaque carré indique un octet) :
Précédent | Sommaire | Suivant |