© Éditions Eyrolles
131
chapitre n° 7
Les tableaux et les pointeurs
Les arguments effectifs de l’appel de echange sont, cette fois, les adresses des variables n et
p (et non plus leurs valeurs). Notez bien que la transmission se fait toujours par valeur, à savoir
que l’on transmet à la fonction echange les valeurs des expressions &n et &p.
Voyez comme, dans echange, nous avons indiqué, comme arguments muets, deux variables
pointeurs destinées à recevoir ces adresses. D’autre part, remarquez bien qu’il n’aurait pas
fallu se contenter d’échanger simplement les valeurs de ces arguments en écrivant (par analogie
avec la fonction echange du chapitre précédent) :
int * x ;
x = ad1 ;
ad1 = ad2 ;
ad2 = x ;
Cela n’aurait conduit qu’à échanger (localement) les valeurs de ces deux adresses alors qu’il a
fallu échanger les valeurs situées à ces adresses.
La fonction echange n’a aucune raison, ici, de vouloir modifier les valeurs de ad1 et ad2. Nous
pourrions préciser dans son en-tête (et, du même coup, dans son prototype) que ce sont en fait
des constantes, en l’écrivant ainsi :
void echange (int * const ad1, int * const ad2)
Notez bien, là encore, la syntaxe de la déclaration des arguments ad1 et ad2. Ainsi, la première s’interprète comme ceci :
* const ad1 est de type int,
ad1 est donc une constante pointant sur un entier.
Il n’aurait pas fallu écrire :
const int * ad1
car cela signifierait que :
int * ad1 est une constante, et que donc :
ad1 est un pointeur sur un entier constant.
Dans ce dernier cas, la valeur de ad1 serait modifiable ; en revanche, celle de *ad1 ne le serait
pas et notre programme conduirait à une erreur de compilation.
Delannoy Livre.book Page 131 Mercredi, 6. mai 2009 4:26 16
131
chapitre n° 7
Les tableaux et les pointeurs
Les arguments effectifs de l’appel de echange sont, cette fois, les adresses des variables n et
p (et non plus leurs valeurs). Notez bien que la transmission se fait toujours par valeur, à savoir
que l’on transmet à la fonction echange les valeurs des expressions &n et &p.
Voyez comme, dans echange, nous avons indiqué, comme arguments muets, deux variables
pointeurs destinées à recevoir ces adresses. D’autre part, remarquez bien qu’il n’aurait pas
fallu se contenter d’échanger simplement les valeurs de ces arguments en écrivant (par analogie
avec la fonction echange du chapitre précédent) :
int * x ;
x = ad1 ;
ad1 = ad2 ;
ad2 = x ;
Cela n’aurait conduit qu’à échanger (localement) les valeurs de ces deux adresses alors qu’il a
fallu échanger les valeurs situées à ces adresses.
La fonction echange n’a aucune raison, ici, de vouloir modifier les valeurs de ad1 et ad2. Nous
pourrions préciser dans son en-tête (et, du même coup, dans son prototype) que ce sont en fait
des constantes, en l’écrivant ainsi :
void echange (int * const ad1, int * const ad2)
Notez bien, là encore, la syntaxe de la déclaration des arguments ad1 et ad2. Ainsi, la première s’interprète comme ceci :
* const ad1 est de type int,
ad1 est donc une constante pointant sur un entier.
Il n’aurait pas fallu écrire :
const int * ad1
car cela signifierait que :
int * ad1 est une constante, et que donc :
ad1 est un pointeur sur un entier constant.
Dans ce dernier cas, la valeur de ad1 serait modifiable ; en revanche, celle de *ad1 ne le serait
pas et notre programme conduirait à une erreur de compilation.
Delannoy Livre.book Page 131 Mercredi, 6. mai 2009 4:26 16
