Ц ++

Ц ++ позив према адреси и позив према референци

Ц ++ позив према адреси и позив према референци

Ц ++ је флексибилни програмски језик опште намене. Првобитно га је креирао Бјарне Строуструп, дански информатичар, давне 1985. Ц ++ подржава методе прослеђивања са три параметра, тј.е., позив према вредности, позив према адреси и позив према референци. У овом чланку ћемо разговарати о позиву путем адресе и позиву путем референтног механизма.

Шта је функција?

Пре него што пређемо на стварну тему, морамо да разумемо која је функција у Ц++. Многи од вас су можда већ упознати са функцијама.

Функција је у основи део кода који се може користити за извршавање одређеног задатка. Функција се углавном користи за смањење понављајућег кода у програму Ц ++. Улаз узима као параметре, а излаз враћа као повратну вредност. Ако функцију дефинишемо једном, можемо је позвати / користити више пута у каснијем делу нашег програма. На тај начин у програму чувамо много понављајућег кода.

Сваки програм Ц ++ има функцију „маин ()“. Функција „маин ()“ је улазна тачка за програм Ц ++. Осим функције „маин ()“, програмер може дефинисати колико год функција жели.

Ево синтаксе дефинисања функције:

Ретурн_типе Фунцтион_Наме (листа улазних параметара)

Функција у Ц ++ може да прихвати 0 или више улазних параметара, док може да врати само једну повратну вредност.

Шта је адреса?

У Ц ++ постоје две врсте променљивих (слично језику Ц) - променљива података и променљива адресе. Променљива адресе користи се за чување адресе друге променљиве података. На пример, размотримо следећи исечак кода:

инт и = 100;
инт * птр = & и;

Овде нам прва изјава говори да је променљива „и“ променљива података и чува вредност 100. У другој изјави декларишемо променљиву показивача, тј.е. „Птр“ и иницијализује га адресом променљиве „и“.

Шта је Референца?

Референца је још једна моћна карактеристика језика Ц ++. Размотримо следећи исечак кода:

инт а = 200;
инт & р = а;

У овом примеру смо прогласили цео број, тј.е. „А“, а затим декларише референтну променљиву „р“, која је иницијализована вредношћу „а“. Дакле, референтна променљива није ништа друго до псеудоним друге променљиве.

Методе преношења параметара:

Постоје три врсте метода преношења параметара у језику Ц ++:

  1. Позив по вредности / Прођи по вредности
  2. Позовите по адреси / прођите поред адресе
  3. Позовите по референци / Проследите по референци

У овом чланку расправљамо о позивима путем адресе и позива путем референце.

Шта је Цалл Би Аддресс / Пасс би аддресс?

У случају методе Цалл би аддресс / Пасс би аддресс, аргументи функције се предају као адреса. Функција позиваоца прослеђује адресу параметара. Променљиве показивача користе се у дефиницији функције. Помоћу методе Цалл би аддресс функција може приступити стварним параметрима и изменити их. Пример методе позива путем адресе видећемо у каснијем одељку овог чланка.

Шта је Цалл Би Референце / Пасс би референце?

У методи Цалл би референце / Пасс би референце, параметри функције се прослеђују као референца. Унутар дефиниције функције, стварним параметрима се приступа помоћу референтне променљиве.

Примери:

Сада, пошто разумемо концепт метода прослеђивања параметара, видећемо неколико примера програма за разумевање механизма за прослеђивање параметара у Ц ++:

  1. Пример-1 - Позив адресом (1)
  2. Пример-2 - Позив адресом (2)
  3. Пример-3 - Позив путем референце (1)
  4. Пример-4 - Позив путем референце (2)

Прва два примера су дата како би се објаснило како метода Цалл би аддресс функционише у Ц++. Последња два примера су објашњење позива позивањем на референце.

Пример-1 - Позив адресом (1)

У овом примеру ћемо демонстрирати позив према механизму адресе. Из функције „маин ()“ позивамо функцију „хелло ()“ и прослеђујемо адресу „вар“. У дефиницији функције примамо адресу „вар“ у променљиву показивача, тј.е., „П“. Унутар функције здраво, вредност „вар“ се мења на 200 помоћу показивача. Стога се вредност „вар“ мења у вредност 200 унутар функције „маин ()“ након позива функције „хелло ()“.

#инцлуде
коришћење простора имена стд;
воид здраво (инт * п)

цоут << endl << "Inside hello() function : " << endl;
цоут << "Value of *p = " << *p << endl;
* п = 200;
цоут << "Value of *p = " << *p << endl;
цоут << "Exiting hello() function." << endl;

инт маин ()

инт вар = 100;
цоут << "Value of var inside main() function = " << var << endl;
здраво (& вар);
цоут << endl << "Value of var inside main() function = " << var << endl;
ретурн 0;

Пример-2 - Позив адресом (2)

Ово је још један пример позива путем адресе. У овом примеру ћемо објаснити како се метод позивања адресом може користити за решавање стварног проблема. На пример, желимо да напишемо функцију за замену две променљиве. Ако користимо механизам позива по вредности за замену две променљиве, стварне променљиве се не мењају у функцији позиваоца. Метод позива путем адресе може се користити у таквом сценарију. У овом примеру прослеђујемо адресу и вар_1 (& вар_1) и вар_2 (& вар_2) функцији „миСвап ()“. Унутар функције „миСвап ()“ мењамо вредности ове две променљиве уз помоћ показивача. Као што можете видети у доњем излазу, стварна вредност ових променљивих се замењује у функцији „маин ()“ након извршавања функције „миСвап ()“.

#инцлуде
коришћење простора имена стд;
воид миСвап (инт * вптр_1, инт * вптр_2)

инт темп_вар;
темп_вар = * вптр_1;
* вптр_1 = * вптр_2;
* вптр_2 = темп_вар;

инт маин ()

инт вар_1 = 100;
инт вар_2 = 300;
цоут << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
цоут << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
цоут << "Calling mySwap() function - Call by address." << endl << endl;
миСвап (& вар_1, & вар_2);
цоут << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
цоут << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
ретурн 0;

Пример-3 - Позив путем референце (1)

У овом примеру ћемо демонстрирати како позив путем референце функционише у Ц-у++. У дефиницији функције „хелло ()“ вредност се прима као референтна променљива (& п). Уз помоћ референтне променљиве (и.е., п), можемо да променимо вредност стварног параметра (вар) унутар функције „маин ()“.

#инцлуде
коришћење простора имена стд;
воид здраво (инт & п)

цоут << endl << "Inside hello() function : " << endl;
цоут << "Value of p = " << p << endl;
п = 200;
цоут << "Value of p = " << p << endl;
цоут << "Exiting hello() function." << endl;

инт маин ()

инт вар = 100;
цоут << "Value of var inside main() function = " << var << endl;
здраво (вар);
цоут << endl << "Value of var inside main() function = " << var << endl;
ретурн 0;

Пример-4 - Позив путем референце (2)

Ово је још један пример позива путем референце. У овом примеру ћемо демонстрирати како позив путем референце функционише у Ц ++ уз помоћ примера из стварног света. Функција „миСвап ()“ позива се из функције „маин ()“ са следећим параметрима - вар_1 и вар_2. Унутар функције „миСвап ()“ примамо параметре као референтне променљиве.

#инцлуде
коришћење простора имена стд;
воид миСвап (инт & вреф_1, инт & вреф_2)

инт темп_вар;
темп_вар = вреф_1;
вреф_1 = вреф_2;
вреф_2 = темп_вар;

инт маин ()

инт вар_1 = 100;
инт вар_2 = 300;
цоут << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
цоут << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
цоут << "Calling mySwap() function - Call by reference." << endl << endl;
миСвап (вар_1, вар_2);
цоут << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
цоут << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
ретурн 0;

Закључак

Разумевање метода прослеђивања параметара у Ц++ је веома пресудно. Програмски језик Ц подржава позиве по вредности и позиве по адреси. Али, Ц ++ подржава позивање референцом заједно са претходна два механизма. У овом чланку видели смо неколико радних примера за разумевање концепта Позив путем адресе и Позив путем референце. Позив путем адресе је врло моћан и популаран метод у апликацијама са уграђеним доменом.

Како развити игру на Линуку
Пре деценију, није много корисника Линука предвидело да ће њихов омиљени оперативни систем једног дана бити популарна платформа за играње комерцијални...
Портови комерцијалних игара отвореног кода
Бесплатне рекреације покретачких игара са отвореним кодом и више платформи могу се користити за играње старих, као и неких прилично недавних наслова и...
Најбоље игре командне линије за Линук
Командна линија није само ваш највећи савезник када користите Линук - она ​​такође може бити извор забаве јер је можете користити за играње многих заб...