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

C Call Address



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

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

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







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



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



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





Ретурн_типе Име_функције(Листа улазних параметара)

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

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

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



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

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

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

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

интдо= 200;
инт &р=до;

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

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

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

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

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

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

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

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

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

Примери:

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

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

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

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

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

#инцлуде
Користећи именски просторсати;

празнинаЗдраво(инт *п)
{
цена <<ендл<< 'Унутра хелло () функција:' <<ендл;
цена << 'Вредност *п =' << *п<<ендл;
*п= 200;
цена << 'Вредност *п =' << *п<<ендл;
цена << 'Излазак из функције хелло ().' <<ендл;
}

интглавни()
{
интгде= 100;
цена << 'Вредност вар унутар маин () фунцтион =' <<где<<ендл;

Здраво(&где);

цена <<ендл<< 'Вредност вар унутар маин () фунцтион =' <<где<<ендл;

повратак 0;
}

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

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

#инцлуде
Користећи именски просторсати;

празнинамиСвап(инт *вптр_1,инт *вптр_2)
{
инттемп_вар;
темп_вар= *вптр_1;
*вптр_1= *вптр_2;
*вптр_2=темп_вар;
}

интглавни()
{
интвар_1= 100;
интвар_2= 300;

цена << 'Пре позивања функције миСвап (), вредност вар_1:' <<вар_1<<ендл;
цена << 'Пре позивања функције миСвап (), вредност вар_2:' <<вар_2<<ендл<<ендл;

цена << 'Цаллинг миСвап () фунцтион - Цалл би аддресс.' <<ендл<<ендл;
миСвап(&вар_1,&вар_2);

цена << 'Након позивања функције миСвап (), вредност вар_1:' <<вар_1<<ендл;
цена << 'Након позивања функције миСвап (), вредност вар_2:' <<вар_2<<ендл;

повратак 0;
}

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

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

#инцлуде
Користећи именски просторсати;

празнинаЗдраво(инт &п)
{
цена <<ендл<< 'Унутра хелло () функција:' <<ендл;
цена << 'Вредност п =' <<п<<ендл;
п= 200;
цена << 'Вредност п =' <<п<<ендл;
цена << 'Излазак из функције хелло ().' <<ендл;
}

интглавни()
{
интгде= 100;
цена << 'Вредност вар унутар маин () фунцтион =' <<где<<ендл;

Здраво(где);

цена <<ендл<< 'Вредност вар унутар маин () фунцтион =' <<где<<ендл;

повратак 0;
}

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

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

#инцлуде
Користећи именски просторсати;

празнинамиСвап(инт &вреф_1,инт &вреф_2)
{
инттемп_вар;
темп_вар=вреф_1;
вреф_1=вреф_2;
вреф_2=темп_вар;
}

интглавни()
{
интвар_1= 100;
интвар_2= 300;

цена << 'Пре позивања функције миСвап (), вредност вар_1:' <<вар_1<<ендл;
цена << 'Пре позивања функције миСвап (), вредност вар_2:' <<вар_2<<ендл<<ендл;

цена << 'Позивање функције миСвап () - Позовите по референци.' <<ендл<<ендл;
миСвап(вар_1, вар_2);

цена << 'Након позивања функције миСвап (), вредност вар_1:' <<вар_1<<ендл;
цена << 'Након позивања функције миСвап (), вредност вар_2:' <<вар_2<<ендл;

повратак 0;
}

Закључак

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