Dernière mise à jour le 27 juillet 2020
Arguments réels #
Les arguments qui sont mentionnés dans l’appel de fonction est connu comme l’argument réel. Par exemple :
func1(12, 23);
ici 12
et 23
sont des arguments réels.
Les arguments réels peuvent être des constantes, des variables, des expressions etc.
12 |
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression |
Arguments formels #
Les arguments qui sont mentionnés dans la définition de la fonction sont appelés arguments formels. Les arguments formels sont très similaires aux variables locales à l’intérieur de la fonction. Tout comme les variables locales, les arguments formels sont détruits lorsque la fonction se termine.
1234 |
int factorial(int n){ // write logic here} |
Ici n
est l’argument formel. Choses à retenir sur les arguments réels et formels.
- L’ordre, le nombre et le type des arguments réels dans l’appel de la fonction doivent correspondre aux arguments formels de la fonction.
- S’il y a un désaccord de type entre les arguments réels et formels, alors le compilateur essaiera de convertir le type des arguments réels en arguments formels s’il est légal, Sinon, une valeur poubelle sera passée à l’argument formel.
- Les modifications apportées à l’argument formel n’affectent pas les arguments réels.
Le programme suivant démontre ce comportement.
1 2 3 4 5 6 7 8 910111213141516171819202122232425 |
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);} |
Ici, la valeur de la variable x
est 10
avant l’appel de la fonction func_1()
, après l’appel de func_1()
, la valeur de x
à l’intérieur de main()
est toujours 10
. Les changements effectués à l’intérieur de la fonction func_1()
n’affectent pas la valeur de x
. Cela se produit parce que lorsque nous passons des valeurs aux fonctions, une copie de la valeur est faite et cette copie est passée aux arguments formels. Par conséquent, les arguments formels travaillent sur une copie de la valeur originale, et non sur la valeur originale elle-même, c’est pourquoi les changements effectués à l’intérieur de func_1()
ne sont pas reflétés à l’intérieur de main()
. Ce processus est connu comme le passage d’arguments en utilisant l’appel par la valeur, nous discuterons de ce concept plus en détail dans les prochains chapitres.