Maison > Article > développement back-end > Pourquoi l'appel par valeur ne modifie-t-il pas la variable d'origine ?
Appel par valeur : comprendre les limites
Considérez cet exemple d'appel par valeur où nous tentons de modifier la valeur de l'entrée paramètres au sein d'une fonction :
#include <iostream> using namespace std; void changeValue(int value); int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; } void changeValue(int value) { value = 6; }
Étonnamment, la sortie reste 5 malgré nos efforts pour la changer à 6. Ce comportement découle du principe fondamental de l'appel par valeur en C/C.
L'essence de l'appel par valeur
Dans l'appel par valeur, un une copie de la variable d'origine est transmise à la fonction en tant qu'argument. Toutes les modifications apportées à cette copie au sein de la fonction restent confinées à cette portée locale et n'affectent pas la variable d'origine.
Dans notre exemple, la fonction changeValue reçoit une copie de valeur de main(). Toute modification apportée à cette copie n'a pas d'impact sur la variable de valeur d'origine.
La solution : Pass-by-Reference
Pour modifier la variable d'origine à partir d'une fonction, nous devons utiliser le passage par référence. En C/C , cela est noté comme suit :
void changeValue(int &value);
En utilisant & dans la signature de la fonction, nous créons une référence (alias) à la variable d'origine. Toute modification apportée à la référence modifie également la variable d'origine.
Exemple de passage par référence
void changeValue(int &value) { value = 6; }
Maintenant, lorsque nous appelons changeValue dans main(), une référence à value est transmise à la fonction, lui permettant de modifier la valeur d'origine :
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Dans ce scénario, la sortie reflète correctement la valeur modifiée : 6.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!