Hvad er forskellen mellem opkald efter værdi, opkald efter adresse og opkald efter reference under emnefunktionerne i C ++?


Svar 1:

RING TIL VÆRDI:

I opkald efter værdi kan den originale værdi ikke ændres. Når du videregiver en værdi til funktionen, gemmes den lokalt af funktionsparameteren i stakhukommelsens placering. Hvis du ændrer værdien af ​​funktionsparameteren, ændres den kun for den aktuelle funktion, og den vil ikke have nogen effekt uden for den aktuelle funktion, og den ændrer ikke værdien på variablen inde i opkaldsfunktionen.

#include 
ved hjælp af navneområde std;

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

int main ()
{
int a = 1111, b = 0000;
swap (a, b); // videregivelse af værdier.
cout << "værdi af a:" << a << "værdi af b:" << b;
}

RING MED REFERENCE:

Opkaldet med en referencemetode kopierer referencen (adressen) på et argument til parametrene. Inde i funktionen bruges referencen til at få adgang til det faktiske argument, der bruges i opkaldet. Det betyder, at hvis parametrene ændres, ændres værdier uden for funktionen også med den, fordi faktiske og formelle argumenter begge deler det samme adresserum i hukommelsen.

#include 
ved hjælp af navneområde std;

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

int main ()
{
int a = 1111, b = 0000;
swap (& a, & b); // passerende referencer (adresser).
cout << "værdi af a:" << a << "værdi af b:" << b;
}

Svar 2:

Jeg vil skrive prototype af hver funktion

1)

int sjovt (int a, int b)

{

// opkald efter værdi

her kopieres funktionsargument i midlertidig værdi a, b;

// du kan ikke bytte originale data, eller enhver handling på disse data (a, b) vil

ikke afspejles i originale data

}

int sjovt (int & a, int & b)

{

// opkald ved henvisning

// her videresender du variablen direkte med forskellige navn alle ændringer

på data a, reflekteres b tilbage til hovedvariablen

}

int sjovt (int * p1, int * p2)

{

// opkald efter adresse

her videresender du adressen på placeringen ikke den variabel, du har adgang til

variablen ved hjælp af * p1

}


Svar 3:

I opkald efter værdi videregiver vi værdien til funktionen som en parameter, men i opkald ved opdatering overfører vi adressen på den værdi til funktionen som en parameter.

Eksempel på opkald ved opfriskning: -

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

tomt hoved ()

{

int x, y;

cout << "Indtast noserne til udskiftning \ n";

cin >> x >> y;

swap (& x, & y);

getch ();

}

tomt swap (int * a, int * b)

{

int temp;

temp = * a;

* A = * b;

* B = temp;

cout << * en << * b;

}

Eksempel på opkald efter værdi: -

tomt swap (int a, int b);

tomt hoved ()

{

int x, y;

cout << "Indtast noserne til udskiftning \ n";

cin >> x >> y;

swap (x, y);

getch ();

}

tomt swap (int * a, int * b)

{

int temp;

temp = a;

a = b;

b = temp;

cout << a << b;

}