Maison  >  Article  >  développement back-end  >  Pourquoi l'appel par valeur ne modifie-t-il pas la variable d'origine ?

Pourquoi l'appel par valeur ne modifie-t-il pas la variable d'origine ?

DDD
DDDoriginal
2024-11-21 18:43:13785parcourir

Why Doesn't Call-by-Value Modify the Original Variable?

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 &amp;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 &amp;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!

Déclaration:
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