Maison > développement back-end > C++ > Pourquoi `changeValue(value)` ne change-t-il pas `value` en C/C ?

Pourquoi `changeValue(value)` ne change-t-il pas `value` en C/C ?

DDD
Libérer: 2024-11-16 08:47:03
original
360 Les gens l'ont consulté

Why Does `changeValue(value)` Not Change `value` in 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;
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal