Différence entre Appel par valeur et Appel par référence

Différence clé entre l'appel par valeur et l'appel par référence

  • Dans la méthode Appel par valeur, la valeur d'origine n'est pas modifiée, alors que dans la méthode Appel par référence, la valeur d'origine est modifiée.
  • Dans Appel par valeur, une copie de la variable est transmise, tandis que dans Appel par référence, une variable elle-même est transmise.
  • Dans Appel par valeur, les arguments réels et formels seront créés dans différents emplacements mémoire, tandis que dans Appel par référence, les arguments réels et formels seront créés dans le même emplacement mémoire.
  • L'appel par valeur est la méthode par défaut dans les langages de programmation comme C++, PHP, Visual Basic NET et C#, tandis que l'appel par référence n'est pris en charge que dans Java la langue.
  • Les variables d'appel par valeur sont transmises à l'aide d'une méthode simple, tandis que les pointeurs d'appel par référence sont nécessaires pour stocker l'adresse des variables.

Différence entre Appel par valeur et Appel par référence

Dans les langages de programmation, les fonctions peuvent être invoquées de deux manières : appelées appel par valeur et appel par référence.

Qu’est-ce que la méthode Call by Value ?

La méthode d’appel par valeur copie la valeur d’un argument dans le paramètre formel de cette fonction. Par conséquent, les modifications apportées au paramètre de la fonction principale n’affectent pas l’argument.

Dans cette méthode de transmission de paramètres, les valeurs des paramètres réels sont copiées dans les paramètres formels de la fonction et les paramètres sont stockés dans différents emplacements mémoire. Ainsi, toutes les modifications apportées à l'intérieur des fonctions ne sont pas reflétées dans les paramètres réels de l'appelant.

Qu’est-ce que la méthode Appel par Référence ?

La méthode d’appel par référence copie l’adresse d’un argument dans le paramètre formel. Dans cette méthode, l'adresse est utilisée pour accéder à l'argument réel utilisé dans l'appel de fonction. Cela signifie que les modifications apportées au paramètre modifient l'argument transmis.

Dans cette méthode, l'allocation de mémoire est la même que les paramètres réels. Toutes les opérations de la fonction sont effectuées sur la valeur stockée à l'adresse du paramètre réel, et la valeur modifiée sera stockée à la même adresse.

Exemple de code C d'une méthode d'appel par valeur

void main() {
        int a = 10,
        void increment(int);
        Cout << "before function calling" << a;
        increment(a);
        Cout << "after function calling" << a;
        getch();

        void increment(int x) {
            int x = x + 1;
            Cout << "value is" << x;
        }

Sortie :

before function calling 10
value is 11
after function calling 1-0

Parce que la variable déclarée 'a' dans main() est différente de la variable 'x' dans incrément(). Dans ce programme, seuls les noms de variables sont similaires, mais leurs adresses mémoire sont différentes et stockées dans des emplacements mémoire différents.

Java Exemple de code d'une méthode d'appel par référence

Public static void main(string args[]) {
    int a = 10;
    System.out.println("Before call Value of a = ", a);
    Void increment();
    System.out.println("After call Value of a = ", a);
}

Void increment(int x) {
    int x = x + 1;
}

Sortie :

Before call Value of a =10
After call Value of a =11

Parce que la variable déclarée « a » dans fait référence/pointe vers la variable « a » dans main(). Ici, le nom de la variable est différent, mais les deux pointent/font référence aux mêmes emplacements d'adresse mémoire.

Appel par valeur ou appel par référence

Paramètres Appel par valeur Appel par référence
Définition Lors de l'appel d'une fonction, lorsque vous transmettez des valeurs en copiant des variables, cela est appelé « Appel par valeurs ». Lors de l'appel d'une fonction, en langage de programmation, au lieu de copier les valeurs des variables, l'adresse des variables est utilisée, elle est connue sous le nom de « Call By References ».
Arguments Dans cette méthode, une copie de la variable est transmise. Dans cette méthode, une variable elle-même est transmise.
Effect Les modifications apportées dans une copie de variable ne modifient jamais la valeur de la variable en dehors de la fonction. La modification de la variable affecte également la valeur de la variable en dehors de la fonction.
Modification de valeur Ne vous permet pas d'apporter des modifications aux variables réelles. Vous permet d'apporter des modifications aux valeurs des variables à l'aide d'appels de fonction.
Passage de variable Les valeurs des variables sont transmises à l'aide d'une méthode simple. Les variables de pointeur sont nécessaires pour stocker l'adresse des variables.
Modification de la valeur Valeur originale non modifiée. La valeur d'origine est modifiée.
Emplacement de la mémoire Arguments réels et formels
sera créé dans différents
emplacement mémoire
Arguments réels et formels
sera créé dans le même
emplacement mémoire
Sécurité De vrais arguments demeurent
sûrs car ils ne peuvent pas être modifiés
accidentellement.
Les vrais arguments ne sont pas
Sûr. Ils peuvent être
accidentellement modifié, vous devez donc gérer les opérations sur les arguments avec soin.
Réglage par défaut Par défaut dans de nombreuses programmations
des langues comme C++.PHP. Visual Basic NET et C#.
Il est soutenu par la plupart
des langages de programmation comme JAVA, mais
pas par défaut.

Avantages de l'utilisation de la méthode Appel par valeur en C

Avantages/avantages d'un appel par valeur en C :

  • La méthode ne modifie pas la variable d'origine, elle préserve donc les données.
  • Chaque fois qu'une fonction est appelée, n'affectez jamais le contenu réel des arguments réels.
  • Valeur des arguments réels transmise aux arguments formels, de sorte que toute modification apportée à l'argument formel n'affecte pas les cas réels.

Avantages de l'utilisation de la méthode d'appel par référence

Avantages de l'utilisation de la méthode d'appel par référence :

  • La fonction peut changer la valeur de l'argument, ce qui est très utile.
  • Il ne crée pas de données en double pour ne contenir qu'une seule valeur, ce qui vous aide à économiser de l'espace mémoire.
  • Dans cette méthode, il n’y a pas de copie de l’argument avancé. Son traitement est donc très rapide.
  • Vous aide à éviter les modifications effectuées par erreur
  • Une personne qui lit le code ne sait jamais que la valeur peut être modifiée dans la fonction.

Inconvénients de l'utilisation de la méthode Appel par valeur

Voici les principaux inconvénients/inconvénients d’une méthode d’appel par valeur :

  • Les modifications apportées aux paramètres réels peuvent également modifier les variables d'argument correspondantes
  • Dans cette méthode, les arguments doivent être des variables.
  • Vous ne pouvez pas modifier directement une variable dans le corps d'une fonction.
  • Parfois, les arguments peuvent être des expressions complexes
  • Il existe deux copies créées pour la même variable, ce qui n'est pas économe en mémoire.

Inconvénients de l'utilisation de la méthode d'appel par référence

Voici les principaux inconvénients de l’utilisation de la méthode d’appel par référence :

  • Forte garantie non nulle. Une fonction prenant une référence doit s'assurer que l'entrée n'est pas nulle. Il n’est donc pas nécessaire d’effectuer une vérification nulle.
  • Le passage par référence rend la fonction non pure en théorie.
  • Une garantie à vie est un gros problème avec les références. Ceci est particulièrement dangereux lorsque vous travaillez avec des lambdas et des programmes multithread.