C ++ poziv referencom: Korištenje pokazivača (s primjerima)

U ovom uputstvu naučit ćemo o pozivu C ++ pozivanjem na prosljeđivanje pokazivača kao argumenta na funkciju uz pomoć primjera.

U vodiču za funkcije C ++ saznali smo o prosljeđivanju argumenata funkciji. Ova metoda koja se koristi naziva se prosljeđivanje vrijednosti jer se prosljeđuje stvarna vrijednost.

Međutim, postoji još jedan način prosljeđivanja argumenata funkciji u kojoj se stvarne vrijednosti argumenata ne prosljeđuju. Umjesto toga, prosljeđuje se referenca na vrijednosti.

Na primjer,

 // function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )

Primijetite &in void func2(int &numRef). To označava da kao parametar koristimo adresu varijable.

Dakle, kada pozivamo func2()funkciju main()dostavljajući varijablu num kao argument, zapravo prenosimo adresu num varijable umjesto vrijednosti 5 .

C ++ Prođi vrijednost u odnosu na Prođi referencu

Primjer 1: Prolazak pored reference bez pokazivača

 #include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )

Izlaz

 Prije zamjene a = 1 b = 2 Nakon zamjene a = 2 b = 1

U ovom smo programu funkcije prenijeli varijable a i b swap(). Primijetite definiciju funkcije,

 void swap(int &n1, int &n2)

Ovdje koristimo &da označimo da će funkcija prihvatiti adrese kao svoje parametre.

Stoga prevodilac može prepoznati da se umjesto stvarnih vrijednosti referenca varijabli prenosi na parametre funkcije.

U swap()funkciji parametri funkcije n1 i n2 upućuju na istu vrijednost kao i varijable a i b. Stoga se zamjena odvija na stvarnoj vrijednosti.

Isti zadatak može se obaviti pomoću pokazivača. Da biste saznali više o pokazivačima, posjetite C ++ pokazivače.

Primjer 2: Prolazak referencom pomoću pokazivača

 #include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )

Izlaz

 Prije zamjene a = 1 b = 2 Nakon zamjene a = 2 b = 1

Ovdje možemo vidjeti da je izlaz isti kao i u prethodnom primjeru. Primijetite crtu,

 // &a is address of a // &b is address of b swap(&a, &b);

Ovdje se adresa varijable prenosi tijekom poziva funkcije, a ne varijabla.

Budući da se adresa predaje umjesto vrijednosti, *za pristup vrijednosti pohranjenoj na toj adresi mora se koristiti operator preusmjeravanja .

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1i *n2daje vrijednost pohranjenu na adresi n1, odnosno n2.

Budući da n1 i n2 sadrže adrese a i b, sve se čini *n1i * n2 će promijeniti stvarne vrijednosti a i b.

Dakle, kada u main()funkciji ispisujemo vrijednosti a i b , vrijednosti se mijenjaju.

Zanimljivi članci...