Разлика између показивача и референце

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

Обе су променљиве које се користе за посредно позивање на друге предмете и деле заједничке карактеристике на површини. Иако имају пуно заједничких могућности, они су такође веома сложени за разумевање.

Показивач је променљива која садржи меморијску адресу друге променљиве, док је референца попут показивача који се индиректно може користити за упућивање на другу променљиву.

Чини се да већина програмера развија разумевање када треба користити показиваче и када користити референце, али често наилазе на проблеме чије решење делује нејасно..

Да бисмо боље разумели филозофију, схватимо разлику између њих две.

Шта је Поинтер?

Свака варијабла је меморијска локација која је дефинисана његовом адресом и упарена је са идентификатором који садржи неку вредност која се може мењати током програма. Једноставно речено, променљива је симбол који представља количину.

Показивач је променљива која садржи меморијску адресу друге променљиве. Показивач није ништа друго него адреса и променљива која чува показивач назива се промењивом поинтера.

Идеја је да се користе идентификатори (или имена) уместо нумеричких адреса како би се олакшао терет програмирања и тако смањила сложеност програма. Пошто се ове адресе односе на стварне локације у меморији рачунара, показивачи се могу користити за приступ и манипулирање садржајем похрањеним у меморији.

Као и било која варијабла или константа, показатељи се морају декларирати за њихове типове. Пошто показивачи садрже меморијске адресе које припадају засебном типу података, морају се декларисати помоћу показивача пре него што можете да радите с њима. Општи облик декларације показивача је:

Име_врста * вар-наме;

Овде је „Дата_типе“ основни тип показивача, а „вар-наме“ је променљива поинтера. Звездица (*) овде се користи за проглашавање поинтера који означава променљиву „вар-наме“ као променљиву поинтера..

инт * п; // интегер поинтер

флоат * к; // флоат поинтер

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

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

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

Омогућује програмерима да створе друго име за променљиву коју могу користити за манипулацију садржајем похрањеним у тој променљивој. То је ентитет алиас за другу варијаблу и има исту адресу као изворна варијабла. Подржава пролазну референцу која дјелује као формални функцијски параметри и једном када је дефинирано да се односи на варијаблу, она се не може поново поставити што значи да се не може упутити на другу варијаблу.

За разлику од показивача, не треба им оператер дереференцирања да би приступио вредности; у ствари, они се могу користити као нормалне променљиве.

инт и;

инт & ри = и;

Овде је "ри" целовита референца иницијализирана на "и". Декларише „ри“ као објект типа „референца на инт“. Референца се може лако збунити са показивачем који је независна променљива, чије се адресе адресе не могу поново доделити након креирања.

Разлика између показивача и референце

  1. Основе показивача и референце

- Обе пружају готово сличне могућности у погледу употребљивости и разлика може бити шкакљива. Показивач је само променљива која чува меморијску адресу друге променљиве, док је референца као псеудоним за већ постојећу променљиву. То ствара друго име променљиве која се може користити за модификовање садржаја смештеног у тој променљивој.

  1. Изјава поинтера и референце

- Показивач је као и свака друга променљива која чува део података. За разлику од других варијабли, променљиве поинтера смештају меморијске адресе уместо вредности. Поинтер се дереференцира помоћу оператора индирекције * за приступ меморијској локацији променљиве на коју упућује. С друге стране, референци не треба ниједан оператер дереференцирања да би приступио вредности.

  1. Поновно додељивање показивача и референце

- За разлику од показивача који се могу иницијализирати у било којем тренутку, референце се морају додијелити приликом иницијализације. Поинтовима се може приступити директно, док референцама не може бити директно приступљено.

  1. Меморијска адреса за показивач и референцу

- Променљива поинтера има своју локацију у меморији, што значи да када декларишете показивач, одредите локацију која је меморијска адреса додељена свакој јединици меморије. Варијабла показивача има исту адресу где је сачувана у меморији. С друге стране, референтна варијабла је псеудоним за другу променљиву и тиме узима адресу референтне променљиве.

  1. НУЛЛ вредност за поинтер и референцу

- НУЛЛ представља крај листе што значи да вриједност није позната и одређује да варијабла нема важећи адресни простор. НУЛЛ вриједност може се додијелити директно варијабли поинтера што сугерира да нигдје не упућује, док НУЛЛ не може бити додијељена референтној варијабли.

Поинтер вс. Референце: Упоредни графикон

Резиме Поинтер вс. Референце

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