Qu'est-ce que l'appel par valeur et l'appel par référence ?

2 Réponses


  • Il existe deux manières de passer des arguments/paramètres à une fonction. Une méthode est Appel par valeur et l'autre méthode est Appel par référence.
    Appel par valeur : dans l'appel par valeur, la programmation envoie la copie d'un argument/paramètre à une fonction. Le programmeur ne transmet pas la variable réelle. Étant donné que seule la copie de la variable est transmise à la fonction, les changements/modifications effectués dans une fonction n'affectent pas la variable et la valeur de la variable reste la même après l'appel de la fonction.
    L'exemple suivant le clarifiera;
    Supposons a = 2 avant l'appel de fonction Fonction
    vide (int a)
    {
    a = a + a;
    a = a – 5 ;
    }
    Étant donné que seule une copie de la variable "a" est transmise à la fonction, c'est pourquoi même après l'appel de fonction, la valeur de a restera 2.
    Appel par référence : dans l'appel par référence, l'adresse de l'argument/paramètre est transmise à la fonction. En termes simples, la variable réelle ou un pointeur est transmis à la fonction et la valeur de la variable peut être changée/modifiée dans une fonction
    Par exemple ; supposons a = 2 avant l'appel de fonction
    Après avoir passé cette valeur à une fonction comme
    Void function(int &a)
    {
    *a = *a + *a;
    *a = *a – 5;
    }
    La valeur de a deviendra "1" après l'appel de cette fonction.
  • Les arguments passés à la fonction peuvent être de deux types à savoir

    1. Valeurs passées
    2. Adresse passée

    Le premier type fait référence à l'appel par valeur et le second type fait référence à l'appel par référence.

    Par exemple, considérons program1

    main()
    {
    int x=50, y=70;
    échange(x,y);
    printf(“x=%dy=%d”,x,y);
    }

    échange(x1,y1)
    entier x1,y1;
    {
    int z1;
    z1=x1;
    x1=y1 ;
    y1=z1;
    printf("x1=%d y1=%d",x1,y1) ;
    }

    Ici, la valeur à l'échange de fonction est passée par valeur.

    Considérons program2

    main()
    {
    int x=50, y=70;
    échange(&x,&y);
    printf(“x=%dy=%d”,x,y);
    }

    échange(x1,y1)
    int *x1,*y1;
    {
    int z1;
    z1=*x1;
    *x1=*y1;
    *y1=z1;
    printf(“*x=%d *y=%d”,x1,y1);
    }

    Ici, la fonction est appelée par référence. En d'autres termes, l'adresse est transmise en utilisant le symbole & et la valeur est accessible en utilisant le symbole *.

    La principale différence entre eux peut être vue en analysant la sortie de programme1 et programme2.

    La sortie de program1 qui est appelée par valeur est

    x1=70 y1=50
    x=50 y=70

    Mais la sortie de program2 qui est appelée par référence est

    *x=70 *y=50
    x=70 y=50

    C'est parce qu'en cas d'appel par valeur la valeur est passée à la fonction nommée comme échange et là, la valeur a été échangée et imprimée sous la forme

    x1=70 y1=50

    et à nouveau puisqu'aucune valeur n'est renvoyée et donc les valeurs d'origine de x et y comme dans la fonction principale, à savoir

    x=50 y=70 ont été imprimées.

Ecrivez votre réponse

Votre réponse apparaîtra après modération