Maison >développement back-end >C++ >Pourquoi `changeValue(value)` ne change-t-il pas `value` en C/C ?
L'énigme de l'appel par valeur : résoudre le casse-tête de la préservation de la valeur
En C/C, les paramètres de fonction sont intrinsèquement transmis par valeur . Cela implique qu'une réplique de la variable d'origine est transmise à la fonction, plutôt qu'à la variable d'origine elle-même. Ce comportement peut prêter à confusion, comme l'illustre l'extrait de code suivant :
void changeValue(int value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Lors de l'exécution de ce code, on pourrait s'attendre à ce que le résultat soit « La valeur est : 6 ». après l'appel de fonction. Cependant, étonnamment, le résultat reste « La valeur est : 5 ». La raison de ce comportement réside dans les subtilités de l'appel par valeur.
Lorsque la fonction changeValue() est invoquée, une copie de la valeur 5 est créée et transmise à la fonction. Cela signifie qu'au sein de la fonction, la valeur 6 est attribuée à la copie, laissant la valeur originale de 5 intacte.
Pour remédier à ce problème et modifier la variable d'origine, il faut recourir à l'appel par référence. Cette technique consiste à transmettre une référence à la variable d'origine à la fonction. Dans ce cas, la fonction peut alors modifier la valeur d'origine, reflétant les changements dans la fonction appelante.
void changeValue(int& value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Maintenant, lors de l'exécution du code, le résultat sera "La valeur est : 6". Cela met en évidence la distinction entre appel par valeur et appel par référence et l'importance de choisir celui qui convient en fonction du comportement prévu du programme.
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!