Transmission des paramètres
En C, les arguments sont transmis par valeur.
Exemple
Ecrire un programme en C qui permet de permuter les valeurs de deux variables.
#include< stdio.h >
main()
{
void echange(int, int),
int a=1, b=20;
printf("Avant: %d %d", a,b);
echange(a,b);
printf("Après: %d %d", a,b);
retrurn 0;
}
void echange(inta, intb)
{
int c, b, a;
printf("Avant échange: %d %d", a,b);
c=a;
a=b;
b=c;
printf("Après échange: %d %d", a,b);
}
L'exécution de ce programme produit le résultat suivant:
avant: 10 20
avant échange: 10 20
après échange: 20 10
après: 10 20
On constate que lors de l'appel "échange reçoit des valeurs mais en revenant au programme principal aucune modification n'a été effectuée sur les valeurs transmises. Cela est dû à la transmission par valeur qui ne fait qu'une simple copie des valeurs utilisées.
Ce problème de permutation de valeur doit être résolu en utilisant la transmission par adresse.
En C, la transmission par adresse peut être simulée en utilisant un pointeur. Ceci permet de travailler sur le contenu de l'adresse.
#include
main()
{
void echange(int *ad1, int *ad2);
int a=10, b=20;
printf("avant: %d %d", a,b);
echange(&a, &b);
printf("après %d %d", a,b);
return 0;
}
void echange(int *ad1, int *ad2)
{
int c;
printf("avant échange: %d %d", *ad1, *ad2);
c=*ad1;
*ad1=*ad2;
*ad2=c;
printf("après échange %d %d", *ad1, *ad2);
}