Appel de fonction: passer par valeur et passer par adresse

1. Appel par valeur

Caractéristiques : Le paramètre formel prend la valeur du paramètre réel et la modification du paramètre formel n'entraînera pas la modification de la valeur du paramètre réel transmis par le point d'appel. Équivalent à copier .

Exemple:

void swap (int x, int y)
    {   int t;
        t= x;  x=y;  y=t;
        printf ("%d %d",x,y);

    }

main()
    {
        int a=3 ,b=4;
        swap (a,b);
        printf("%d %d",a,b);

    }

solution:

Lors du passage des valeurs, a, b, x et y ont tous un espace de stockage , ce qui équivaut à passer la valeur de a à x et la valeur de b à y. Les valeurs de x et y sont copiées à partir des valeurs de a et b.

Comme il est passé par valeur, les valeurs de a et b ne changeront pas après l'appel de la méthode swap .

Le résultat de sortie est donc 4, 3, 3, 4

2. Appel par adresse

Caractéristiques : L'acquisition du paramètre formel est l'adresse du paramètre réel, qui équivaut à la référence d'adresse de l'unité de stockage de paramètres réelle. Par conséquent, le changement de sa valeur modifie également la valeur du paramètre réel.

Exemple:

void swap (int *x, int *y)
    {   int *t;
        *t= *x;  *x=*y;  *y=*t;
        printf ("%d %d",*x,*y);

    }

main()
    {
        int a=3 ,b=4;
        swap (a,b);
        printf("%d %d",a,b);

    }

solution:

Adressage: Comme indiqué dans le code, x et y sont tous deux marqués d'un * (astérisque), indiquant que x et y sont des pointeurs.

x et y pointent vers l'espace de stockage de a et b, car ils pointent vers l'espace de stockage de a et b. Lorsque les valeurs de x et y sont échangées, les valeurs de a et b changeront également en conséquence .

La différence avec la valeur de passage est la suivante: l'adresse x, y pointe vers l'espace de stockage de a, b

Le résultat de sortie est donc: 4, 3, 4, 3

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44690047/article/details/114916263
conseillé
Classement