Ц ++ позив референцом: Коришћење показивача (са примерима)

У овом упутству ћемо научити о позиву Ц ++ позивањем на прослеђивање показивача као аргумента на функцију уз помоћ примера.

У водичу за Ц ++ функције сазнали смо о прослеђивању аргумената функцији. Овај метод који се користи назива се прослеђивање вредности јер се прослеђује стварна вредност.

Међутим, постоји још један начин прослеђивања аргумената функцији где се стварне вредности аргумената не преносе. Уместо тога, преноси се референца на вредности.

На пример,

 // 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; )

Примети &унутра void func2(int &numRef). Ово означава да као параметар користимо адресу променљиве.

Дакле, када позивамо func2()функцију main()предајући променљиву нум као аргумент, заправо преносимо адресу нум променљиве уместо вредности 5 .

Ц ++ Пасс би Валуе вс Пасс би Референце

Пример 1: Пролазак поред референце без показивача

 #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; )

Оутпут

 Пре замене а = 1 б = 2 После замене а = 2 б = 1

У овом програму смо променили променљиве а и б у swap()функцију. Обратите пажњу на дефиницију функције,

 void swap(int &n1, int &n2)

Овде користимо &да означимо да ће функција прихватити адресе као своје параметре.

Дакле, компајлер може да идентификује да се уместо стварних вредности референца променљивих преноси на параметре функције.

У swap()функцији, параметри функције н1 и н2 указују на исту вредност као и променљиве а и б. Стога се замена одвија на стварној вредности.

Исти задатак се може урадити помоћу показивача. Да бисте сазнали више о показивачима, посетите Ц ++ показиваче.

Пример 2: Пролазак поред референце помоћу показивача

 #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; )

Оутпут

 Пре замене а = 1 б = 2 После замене а = 2 б = 1

Овде можемо видети да је излаз исти као и у претходном примеру. Обратите пажњу на линију,

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

Овде се адреса променљиве преноси током позива функције, а не променљива.

С обзиром да се адреса предаје уместо вредности, оператор преусмеравања *мора се користити за приступ вредности ускладиштеној на тој адреси.

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

*n1и *n2даје вредност ускладиштену на адреси н1, односно н2.

Пошто н1 и н2 садрже адресе а и б, све је учињено *n1и * н2 ће променити стварне вредности а и б.

Дакле, када у main()функцији исписујемо вредности а и б , вредности се мењају.

Занимљиви Чланци...