Quina diferència hi ha entre trucada per valor, trucada per adreça i trucada per referència en les funcions del tema de C ++?


Resposta 1:

CONVOCAT BYRIA PER VALOR:

Per trucada per valor, no es pot canviar el valor original. Quan es passa un valor a la funció, el paràmetre de funcions s'emmagatzema localment a la ubicació de la memòria de pila. Si canvieu el valor del paràmetre de funció, es canvia només per a la funció actual i no tindrà cap efecte fora de la funció actual i no canvia el valor de variable dins de la funció de trucada.

#incloure 
ús de l’espai de noms std;

void swap_numbers (int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}

int principal ()
{
int a = 1111, b = 0000;
intercanvi (a, b); // passant els valors.
cout << "valor de a:" << a << "valor de b:" << b;
}

CONVOCAT PER REFERÈNCIA:

El mètode de trucada per referència copia els paràmetres de la referència (adreça) d’un argument. Dins de la funció, s'utilitza la referència per accedir a l'argument real que s'utilitza en la trucada. Vol dir que si els paràmetres canvien, els valors fora de la funció també canvien perquè els arguments reals i formals comparteixen el mateix espai d’adreces a la memòria.

#incloure 
ús de l’espai de noms std;

void swap_numbers (int * a, int * b) // punters
{
int temp;
temp = * a;
* a = * b;
* b = temp;
}

int principal ()
{
int a = 1111, b = 0000;
intercanvi (& a, & b); // passant referències (adreces).
cout << "valor de a:" << a << "valor de b:" << b;
}

Resposta 2:

Escriuré prototip de cada funció

1)

int diversió (int a, int b)

{

// trucar per valor

aquí l'argument de la funció es copia en el valor temporal a, b;

// no podreu canviar les dades originals o qualsevol operació d'aquestes dades (a, b)

no es reflecteixen a les dades originals

}

int diversió (int & a, int & b)

{

// trucar per referència

// aquí estàs passant la variable directament amb el nom de tots els canvis diferents

a les dades a, b es reflectirà la variable principal

}

int diversió (int * p1, int * p2)

{

// trucar per adreça

aquí estàs passant l’adreça d’ubicació no la variable a la qual pots accedir

la variable mitjançant * p1

}


Resposta 3:

En trucada per valor, passem el valor a la funció com a paràmetre, però en trucada per referència, passem l'adreça d'aquest valor a la funció com a paràmetre.

Exemple de trucada per referència: -

void swap (int * a, int * b);

void main ()

{

int x, y;

cout << "Introduïu els nodes per canviar \ n";

cin >> x >> y;

intercanvi (& x, & y);

getch ();

}

void swap (int * a, int * b)

{

int temp;

temp = * a;

* a = * b;

* b = temp;

cout << * a << * b;

}

Exemple de trucada per valor: -

void swap (int a, int b);

void main ()

{

int x, y;

cout << "Introduïu els nodes per canviar \ n";

cin >> x >> y;

intercanvi (x, y);

getch ();

}

void swap (int * a, int * b)

{

int temp;

temp = a;

a = b;

b = temp;

cout << a << b;

}