Maison > développement back-end > C++ > 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
Libérer: 2024-11-21 18:43:13
original
921 Les gens l'ont consulté

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

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

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

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

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 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