Programmation C-C++/Types avancés
Les pointeurs et références[modifier]
Les pointeurs sont des variables très utilisées en C et en C++. Ils doivent être considérés comme des variables, il n'y a rien de sorcier derrière les pointeurs. Cependant, les pointeurs ont un domaine d'application très vaste.
Les références sont des identificateurs synonymes d'autres identificateurs, qui permettent de manipuler certaines notions introduites avec les pointeurs plus souplement. Elles n'existent qu'en C++.
Parlons d abord de Pointeurs[modifier]
Voici un exemple de pointeurs, int * pp; signifie que pp est une variable qui contient un pointeur vers un entier, ou encore contient l'adresse d'une nombre entier. On peut se poser la question, pour preciser le type pointé, ici int (entier), simplement par ce que le systeme fait des calculs d'adresse et doit connaitre le deplacement a faire pour trouver l'element suivant.
Regardons la differences entre les codes suivants :
double nbReel[4]= { 10.5, 17.5, 23, 56};
int nbEnt [4] = { 5, 6, 9, 44};
double *nb1; int *nb2;
nb1 = nbReel;
nb2 = nbEnt;
Ici nb1 recoit l'adresse du tableau nbReel, qu on peut aussi ecrire nb1 = &nbReel[0]
nb1 + 1 est l'addresse du suivant. C'est a dire de nbReel[1], pour se fixer les idees, supposons que le tableau nbReel est implementer en memoire a l'adresse 1200, qui est donc l'adresse de nbReel[0], alors l'adresse de nbReel[1] est 1208 (ou encore nb1+1 est 1208), on ajoute 8, parce que la taille d'un nombre "double" est 8 octets (bytes). maintenant supposons que l'adresse de nbEnt[0] ( meme chose que nbEnt) soit 2200 alors adresse de nbEnt[1] est 2204, car la taille d'un entier est 4 octets. C'est-à-dire nb2 + 1 est 2204.
De plus maintenant que le pointeur nb1 contient l'adresse de debut de zone nbReel, on peut acceder a n'importe quel element du tableau NbReel avec le pointeur nb1, par exemple : *nb1 represente l'objet pointe par nb1, c'est a dire valeur 10.5.
Et *(nb1+1) represente l'objet pointe par nb1 +1, c est a dire valeur suivante : 17.5. Attention a la parenthese ! *nb1 + 1 : veut dire on ajoute 1 à l'objet pointe par nb1 (on ajoute 1 au nombre reel 10.5 : ce qui donne 11.5).