IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
next up previous contents index
Next: Discussion Up: Les pointeurs Previous: Exercice

Sous-sections

Passage de paramètres

 

Les besoins du programmeur

En ce qui concerne le passage de paramètres à une procédure, le programmeur a deux besoins fondamentaux :
-
soit il désire passer une valeur qui sera exploitée par l'algorithme de la procédure (c'est ce dont on a besoin quand on écrit par exemple sin(x)). Une telle façon de passer un paramètre s'appelle du passage par valeur ;  

-
soit il désire passer une référence à une variable, de manière à permettre à la procédure de modifier la valeur de cette variable. C'est ce dont on a besoin quand on écrit une procédure réalisant le produit de deux matrices prodmat(a,b,c) où l'on veut qu'en fin d'exécution de prodmat, la matrice c soit égale au produit matriciel des matrices a et b. prodmat a besoin des valeurs des matrices a et b, et d'une référence vers la matrice c. Une telle façon de passer un paramètre s'appelle du passage par adresse.  

Comment les langages de programmation satisfont ces besoins

Face à ces besoins, les concepteurs de langages de programmation ont imaginé différentes manières de les satisfaire, et quasiment chaque langage de programmation dispose de sa stratégie propre de passage de paramètres.

-
Une première possibilité consiste à arguer du fait que le passage de paramètre par adresse est plus puissant que le passage par valeur, et à réaliser tout passage de paramètre par adresse (c'est la stratégie de FORTRAN et PL/1) ;

-
Une seconde possibilité consiste à permettre au programmeur de déclarer explicitement quels paramètres il désire passer par valeur et quels paramètres il désire passer par adresse (c'est la stratégie de PASCAL) ;

-
La dernière possibilité consistant à réaliser tout passage de paramètre par valeur semble irréaliste puisqu'elle ne permet pas de satisfaire le besoin de modification d'un paramètre. C'est cependant la stratégie choisie par les concepteurs du langage C.

La stratégie du langage C

En C, tout paramètre est passé par valeur, et cette règle ne souffre aucune exception. Cela pose le problème de réaliser un passage de paramètre par adresse lorsque le programmeur en a besoin. La solution à ce problème consiste dans ce cas, à déclarer le paramètre comme étant un pointeur. Cette solution n'est rendue possible que par l'existence de l'opérateur adresse de qui permet de délivrer l'adresse d'une lvalue.  

Voyons sur un exemple. Supposons que nous désirions écrire une procédure add, admettant trois paramètres a, b et c. Nous désirons que le résultat de l'exécution de add soit d'affecter au paramètre c la somme des valeurs des deux premiers paramètres. Le paramètre c ne peut évidemment pas être passé par valeur, puisqu'on désire modifier la valeur du paramètre effectif correspondant. Il faut donc programmer add de la manière suivante :

void add(int a, int b, int *c)
/*   c repère l'entier où on veut mettre le résultat   */

{
*c = a + b;
}

int main()
{
int i,j,k;

/*   on passe les valeurs de i et j comme premiers paramètres  */
/*   on passe l'adresse de k comme troisième paramètre         */
add(i,j,&k);
}


next up previous contents index
Next: Discussion Up: Les pointeurs Previous: Exercice
Bernard Cassagne
1998-12-09