© Éditions Eyrolles
129
chapitre n° 7
Les tableaux et les pointeurs
Si ad est un pointeur, les expressions ad et *ad sont des lvalue ; autrement dit ad et *ad sont
modifiables. En revanche, il n’en va pas de même de &ad. En effet, cette expression désigne,
non plus une variable pointeur comme ad, mais l’adresse de la variable ad telle qu’elle a été
définie par le compilateur. Cette adresse est nécessairement fixe et il ne saurait être question de
la modifier (la même remarque s’appliquerait à &n, où n serait une variable scalaire quelconque).
D’une manière générale, des expressions telles que :
(&ad)++ ou (&p)++
seront rejetées à la compilation.
Une déclaration telle que :
int * ad
réserve un emplacement pour un pointeur sur un entier. Elle ne réserve pas en plus un emplacement pour un tel entier. Cette remarque prendra encore plus d’acuité lorsque les objets pointés
seront des chaînes ou des tableaux.
4.3 Incrémentation de pointeurs
Jusqu’ici, nous nous sommes contenté de manipuler, non pas les variables pointeurs ellesmêmes, mais les valeurs pointées. Or si une variable pointeur ad a été déclarée ainsi :
int * ad ;
une expression telle que :
ad + 1
a un sens pour C.
En effet, ad est censée contenir l’adresse d’un entier et, pour C, l’expression ci-dessus représente l’adresse de l’entier suivant. Certes, dans notre exemple, cela n’a guère d’intérêt car
nous ne savons pas avec certitude ce qui se trouve à cet endroit. Mais nous verrons que cela
s’avérera fort utile dans le traitement de tableaux ou de chaînes.
Notez bien qu’il ne faut pas confondre un pointeur avec un nombre entier. En effet, l’expression ci-dessus ne représente pas l’adresse de ad augmentée de un (octet). Plus précisément, la
différence entre ad+1 et ad est ici de sizeof(int) octets (n’oubliez pas que l’opérateur
sizeof fournit la taille, en octets, d’un type donné). Si ad avait été déclarée par :
double * ad ;
cette différence serait de sizeof(double) octets.
De manière comparable, l’expression :
ad++
incrémente l’adresse contenue dans ad de manière qu’elle désigne l’objet suivant.
Delannoy Livre.book Page 129 Mercredi, 6. mai 2009 4:26 16
Précédent

- 142/281

Suivant