Pointeurs et tableaux :
L'utilisation du pointeur de l'exemple précédent n'a qu'un intérêt pédagogique. Mais en C/C++, il y a des cas ou on ne peut pas se passer de leur utilisation. Prenons le cas des tableaux : Le nom d'un tableau sans décoration retourne l'adresse du premier élément du tableau. Ceci fait que l'on peut l'utiliser de la même manière qu'un pointeur tout en gardant à l'esprit que ce n'est pas un pointeur pour autant.
Soit le tableau Tab suivant :
int Tab[10]={5,8,4,3,9,6,5,4,3,8};
L'instruction suivante affiche bien la valeur du premier élément du tableau par pointeur déréférencé.
Ceci nous montre que le nom d'un tableau peut trés bien s'utiliser comme un pointeur sur son premier élément. On peut alors tout à fait déclarer un pointeur et l'initialiser avec le nom du tableau. A condition bien sûr qu'il soit du même type, pointeur sur des entiers dans notre cas :
1 2
| int *pTab;
pTab = Tab; |
On peut donc se servir de ce pointeur comme s'il était un tableau et des opérateurs crochets [] pour accéder à ses éléments :
printf("%d",pTab[0]); // Affiche 5.
Mais ce n'est pas un autre tableau c'est le même que Tab, il référence le même emplacement en mémoire :
1 2 3
|
pTab[0]++;
printf("%d",Tab[0]); // Affiche 6. |
Quand j'incrémente le premier élément du tableau en utilisant le pointeur c'est bien le premier élément du tableau d'origine qui est incrémenté.
Que ce passe t'il si j'écris :
J'ai l'affichage d'une valeur ne faisant pas partie de mon tableau. Ceci est dû au fait que je vais lire une valeur en dehors des limites du tableau sans que le système signale une erreur. L'opérateur crochet n'étant qu'une écriture simplifiée du pointeur déréférencé, ceci :
est équivalent à cela :
Un pointeur et donc un tableau peuvent facilement accéder à n'importe quel lieu en mémoire sans la moindre alerte, jusqu'au plantage de l'application.
Cette dernière écriture ne vous est peut-être pas familière pour accéder au contenu d'un tableau. Elle nous amènera donc à parler de l'arithmétique des pointeurs.
Partager