Différence entre passage par référence et passage par valeur
Il existe deux manières de transmettre des arguments ou des paramètres aux fonctions :
- Passage par valeur
- Passage par référence
Dans le passage par valeur, une copie des arguments réels est transmise aux arguments formels respectifs. Alors que, dans le passage par référence, l’emplacement (adresse) des arguments réels est transmis à des arguments formels, toute modification apportée aux arguments formels se reflétera également dans les arguments réels.
Table de comparaison
Passage par valeur | Passage par référence | |
---|---|---|
Variable | Une copie de la variable est transmise. | La variable elle-même est transmise. |
L’Effet | La modification du copie de variable ne modifie pas la valeur d’origine de la variable en dehors de la fonction. | La modification de la variable affecte également la valeur de la variable en dehors de la fonction. |
Définition de passage par valeur
Quand on utilise le passage par valeur, la copie de la valeur est transmise à la fonction, et les modifications apportées à l’intérieur de la fonction ne se répercutent pas sur les autres fonctions.
Exemple :
#include <stdio.h> /* Prototype */ void swapByValue(int, int); int main() /* Fonction principale */ { int nbr1 = 5, nbr2 = 10; /* les arguments réels seront tels quels */ swapByValue(nbr1, nbr2); printf("nbr1: %d, nbr2: %dn", nbr1, nbr2); } void swapByValue(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } LA SORTIE ================= nbr1: 5, nbr2: 10
Définition de passage par référence
Quand on utilise le passage par référence, l’adresse de l’argument est transmis à la fonction, et les modifications effectuées à l’intérieur de la fonction sont également répercutées en dehors de la fonction.
Exemple :
#include <stdio.h> /* Prototype */ void swapByReference(int*, int*); int main() /* Fonction principale */ { int nbr1 = 5, nbr2 = 10; /* les arguments réels seront modifiés */ swapByReference(&nbr1, &nbr2); printf("nbr1: %d, nbr2: %dn", nbr1, nbr2); } void swapByReference(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; } LA SORTIE ================= nbr1: 10, nbr2: 5
Conclusion:
Si vous souhaitez ne transmettre que la valeur du variable utilisez le «Passage par valeur» et si vous souhaitez voir la modification de la valeur originale du variable, utilisez le «Passage par référence».
salut.je vous felicite vivement car vous avez fait un travail vraiment formidable
merci, content que ça t’aide