Programmer en langage C
104
© Éditions Eyrolles
Une meilleure solution consiste à placer, en début de votre programme, la directive :
#include
laquelle incorporera automatiquement le prototype approprié (entre autres choses).
6 En C, les arguments sont transmis par valeur
Nous avons déjà eu l’occasion de dire qu’en C les arguments d’une fonction étaient transmis par
valeur. Cependant, dans les exemples que nous avons rencontrés dans ce chapitre, les conséquences
et les limitations de ce mode de transmission n’apparaissaient guère. Or voyez cet exemple :
La fonction echange reçoit deux valeurs correspondant à ses deux arguments muets a et b.
Elle effectue un échange de ces deux valeurs. Mais, lorsque l’on est revenu dans le programme
principal, aucune trace de cet échange ne subsiste sur les arguments effectifs n et p.
En effet, lors de l’appel de echange, il y a eu transmission de la valeur des expressions n et
p. On peut dire que ces valeurs ont été recopiées localement dans la fonction echange dans
Conséquences de la transmission par valeur des arguments
#include
main()
{ void echange (int a, int b) ;
int n=10, p=20 ;
printf ("avant appel
: %d %d\n", n, p) ;
echange (n, p) ;
printf ("après appel
: %d %d", n, p)
}
void echange (int a, int b)
{
int c ;
printf ("début echange : %d %d\n", a, b) ;
c = a ;
a = b ;
b = c ;
printf ("fin echange
: %d %d\n", a, b) ;
}
avant appel
: 10 20
début echange : 10 20
fin echange
: 20 10
après appel
: 10 20
Delannoy Livre.book Page 104 Mercredi, 6. mai 2009 4:26 16
104
© Éditions Eyrolles
Une meilleure solution consiste à placer, en début de votre programme, la directive :
#include
laquelle incorporera automatiquement le prototype approprié (entre autres choses).
6 En C, les arguments sont transmis par valeur
Nous avons déjà eu l’occasion de dire qu’en C les arguments d’une fonction étaient transmis par
valeur. Cependant, dans les exemples que nous avons rencontrés dans ce chapitre, les conséquences
et les limitations de ce mode de transmission n’apparaissaient guère. Or voyez cet exemple :
La fonction echange reçoit deux valeurs correspondant à ses deux arguments muets a et b.
Elle effectue un échange de ces deux valeurs. Mais, lorsque l’on est revenu dans le programme
principal, aucune trace de cet échange ne subsiste sur les arguments effectifs n et p.
En effet, lors de l’appel de echange, il y a eu transmission de la valeur des expressions n et
p. On peut dire que ces valeurs ont été recopiées localement dans la fonction echange dans
Conséquences de la transmission par valeur des arguments
#include
main()
{ void echange (int a, int b) ;
int n=10, p=20 ;
printf ("avant appel
: %d %d\n", n, p) ;
echange (n, p) ;
printf ("après appel
: %d %d", n, p)
}
void echange (int a, int b)
{
int c ;
printf ("début echange : %d %d\n", a, b) ;
c = a ;
a = b ;
b = c ;
printf ("fin echange
: %d %d\n", a, b) ;
}
avant appel
: 10 20
début echange : 10 20
fin echange
: 20 10
après appel
: 10 20
Delannoy Livre.book Page 104 Mercredi, 6. mai 2009 4:26 16
