1. Appel par valeur
Caractéristiques : Le paramètre formel prend la valeur du paramètre réel et la modification du paramètre formel n'entraînera pas la modification de la valeur du paramètre réel transmis par le point d'appel. Équivalent à copier .
Exemple:
void swap (int x, int y)
{ int t;
t= x; x=y; y=t;
printf ("%d %d",x,y);
}
main()
{
int a=3 ,b=4;
swap (a,b);
printf("%d %d",a,b);
}
solution:
Lors du passage des valeurs, a, b, x et y ont tous un espace de stockage , ce qui équivaut à passer la valeur de a à x et la valeur de b à y. Les valeurs de x et y sont copiées à partir des valeurs de a et b.
Comme il est passé par valeur, les valeurs de a et b ne changeront pas après l'appel de la méthode swap .
Le résultat de sortie est donc 4, 3, 3, 4
2. Appel par adresse
Caractéristiques : L'acquisition du paramètre formel est l'adresse du paramètre réel, qui équivaut à la référence d'adresse de l'unité de stockage de paramètres réelle. Par conséquent, le changement de sa valeur modifie également la valeur du paramètre réel.
Exemple:
void swap (int *x, int *y)
{ int *t;
*t= *x; *x=*y; *y=*t;
printf ("%d %d",*x,*y);
}
main()
{
int a=3 ,b=4;
swap (a,b);
printf("%d %d",a,b);
}
solution:
Adressage: Comme indiqué dans le code, x et y sont tous deux marqués d'un * (astérisque), indiquant que x et y sont des pointeurs.
x et y pointent vers l'espace de stockage de a et b, car ils pointent vers l'espace de stockage de a et b. Lorsque les valeurs de x et y sont échangées, les valeurs de a et b changeront également en conséquence .
La différence avec la valeur de passage est la suivante: l'adresse x, y pointe vers l'espace de stockage de a, b
Le résultat de sortie est donc: 4, 3, 4, 3