Ц ++ показивачи са примерима

Шта су показивачи?

У Ц ++, показивач се односи на променљиву која садржи адресу друге променљиве. Као и регуларне променљиве, показивачи имају тип података. На пример, показивач типа интегер може да садржи адресу променљиве типа интегер. Показивач типа карактера може да садржи адресу променљиве типа карактера.

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

У овом Ц ++ водичу ћете научити:

Адресе у Ц ++

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

Када креирате променљиву у свом Ц ++ програму, њој се додељује одређени простор у меморији рачунара. Вредност ове променљиве се складишти на додељеној локацији.

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

На пример, ако је к променљива, & к враћа адресу променљиве.

Синтакса декларације показивача

Декларација Ц ++ има следећу синтаксу: | _+_ |

  • Тип података је основни тип показивача који мора бити важећи Ц ++ тип података.
  • Варијабла_наме мора бити име променљиве показивача.
  • Горе коришћена звездица за декларацију показивача слична је звездици која се користи за извођење операције множења. Звездица означава променљиву као показивач.

Ево примера ваљаних декларација показивача у Ц ++: | _+_ |

Референтни оператор (&) и Оператор одређивања (*)

Референтни оператор (&) враћа адресу променљиве.

Оператор дереференције (*) помаже нам да добијемо вредност која је сачувана на меморијској адреси.

На пример:

Ако имамо променљиву са именом нум, сачувану на адреси 0к234 и чувајући вредност 28.

Референтни оператер (&) ће вратити 0к234.

Оператор дереференције (*) ће вратити 5.

Пример 1:

 datatype *variable_name; 

Излаз:

Како ово функционише:

Ево снимке екрана кода:

Објашњење кода:

  1. Увезите датотеку заглавља иостреам -а. Ово ће нам омогућити да користимо функције дефинисане у датотеци заглавља без грешака.
  2. Укључите простор имена стд да бисте користили његове класе без позивања.
  3. Позовите функцију маин (). Логику програма треба додати унутар тела ове функције. Знак {означава почетак тела функције.
  4. Прогласите целобројну променљиву к и доделите јој вредност 27.
  5. Прогласите променљиву показивача *ип.
  6. Сачувајте адресу променљиве к у променљивој показивача.
  7. Одштампајте неки текст на конзоли.
  8. Одштампајте вредност променљиве к на екрану.
  9. Одштампајте неки текст на конзоли.
  10. Одштампајте адресу променљиве к. Вредност адресе је ускладиштена у променљивој ип.
  11. Одштампајте неки текст на конзоли.
  12. Штампа вредност сачувана на адреси показивача.
  13. Програм би требао вратити вриједност након успјешног извођења.
  14. Крај тела главне () функције.

Показивачи и низови

Низови и показивачи раде на основу повезаног концепта. Приликом рада са низовима који имају показиваче потребно је обратити пажњу на различите ствари. Сам назив низа означава основну адресу низа. То значи да за додељивање адресе низа показивачу не би требало користити амперсанд (&).

На пример: | _+_ |

Горе наведено је тачно јер арр представља адресу поља. Ево још једног примера: | _+_ |

Горе наведено је нетачно.

Можемо имплицитно претворити низ у показивач. На пример: | _+_ |

Испод је важећа операција: | _+_ |

Након горње декларације, ип и арр ће бити еквивалентни и делиће својства. Међутим, ип -у се може доделити друга адреса, али не можемо ништа доделити арр.

Пример 2:

Овај пример показује како се креће низ помоћу показивача: | _+_ |

Излаз:

Ево снимке екрана кода:

Објашњење кода:

  1. Прогласите променљиву целобројног показивача ип.
  2. Декларишите низ који се зове арр и у њега сместите 6 целих бројева.
  3. Доделите арр за ип. ИП и арр ће постати еквивалентни.
  4. Направите а за петљу. Променљива петље к је креирана за понављање елемената низа од индекса 0 до 5.
  5. Одштампајте вредности ускладиштене на адреси показивача ИП. Једна вредност ће бити враћена по итерацији, а биће урађено укупно 6 понављања. Ендл је Ц ++ кључна реч која значи крајњу линију. Ова радња вам омогућава да померите курсор на следећи ред након штампања сваке вредности. Свака вредност ће бити одштампана у посебном реду.
  6. За помицање показивача на сљедећу инт позицију након сваке итерације.
  7. Крај фор петље.
  8. Програм мора да врати нешто након успешног извођења.
  9. Крај тела главне () функције.

НУЛЛ Поинтер

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

Пример 3:

 int *x; // a pointer to integer double *x; // a pointer to double float *x; // a pointer to float char *ch // a pointer to a character 

Излаз:

Ево снимке екрана кода:

Објашњење кода:

  1. Прогласите променљиву показивача ип и доделите јој вредност НУЛЛ.
  2. Штампа вредност променљиве показивача ип поред текста на конзоли.
  3. Програм мора вратити вредност по успешном завршетку.
  4. Крај тела главне () функције.

Показивачи променљивих

Помоћу Ц ++ можете управљати подацима директно из меморије рачунара.

Меморијски простор се може доделити или поново доделити по жељи. То омогућавају Поинтер променљиве.

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

Може се декларисати на следећи начин: | _+_ |

Или, | _+_ |

У примеру иоу смо прогласили променљиву показивача п.

Чуваће меморијску адресу.

Звездица је оператор дереференције који значи показивач на.

Показивач п показује на целобројну вредност у меморијској адреси.

Пример 4:

 #include using namespace std; int main() { int x = 27; int *ip; ip = &x; cout << 'Value of x is : '; cout << x << endl; cout << 'Value of ip is : '; cout << ip<< endl; cout << 'Value of *ip is : '; cout << *ip << endl; return 0; } 

Излаз:

Ево снимке екрана кода:

Објашњење кода:

  1. Прогласите променљиву показивача п и променљиву к са вредношћу 30.
  2. Доделите адресу променљиве к на п.
  3. Одштампајте вредност променљиве показивача п поред неког текста на конзоли.
  4. Програм мора вратити вредност по успешном завршетку.
  5. Крај тела главне () функције.

Примена показивача

Функције у Ц ++ могу вратити само једну вредност. Надаље, све променљиве декларисане у функцији распоређене су у стеку позива функције. Чим се функција врати, све варијабле стека се уништавају.

Аргументи за функционисање се прослеђују према вредности, а свака измена извршена на променљивим не мења вредност стварних променљивих које се прослеђују. Следећи пример помаже у илустрацији овог концепта:-

Пример 5: | _+_ |

Излаз:

Ево снимке екрана кода:

Објашњење кода:

  1. Направите прототип функције по имену тест која ће узети два целобројна параметра.
  2. Позовите функцију маин (). Додаћемо програмску логику унутар његовог тела.
  3. Декларишите две целобројне променљиве а и б, свака са вредношћу 5.
  4. Одштампајте неки текст на конзоли. Ендл (крајња линија) ће померити курсор да започне штампање у следећем реду.
  5. Одштампајте вредност променљиве а на конзоли поред другог текста. Ендл (крајња линија) ће померити курсор да започне штампање у следећем реду.
  6. Одштампајте вредност променљиве б на конзоли поред другог текста. Ендл (крајња линија) ће померити курсор да започне штампање у следећем реду.
  7. Креирајте функцију под називом тест () која узима адресе променљивих а и б као параметре.
  8. Одштампајте неки текст на конзоли. Н ће створити нови празан ред пре штампања текста. Ендл (завршна линија) ће померити курсор да започне штампање у следећем реду након штампања текста.
  9. Одштампајте вредност променљиве а на конзоли поред другог текста. Ендл (крајња линија) ће померити курсор да започне штампање у следећем реду.
  10. Одштампајте вредност променљиве б на конзоли поред другог текста. Ендл (крајња линија) ће померити курсор да започне штампање у следећем реду.
  11. Програм мора вратити вредност по успешном завршетку.
  12. Крај тела главне () функције.
  13. Дефинисање теста функције (). Функција треба да узме две променљиве показивача целог броја *н1 и *н2.
  14. Додељивање променљиве показивача *н1 вредности 10.
  15. Додељивање променљиве показивача *н2 вредности 11.
  16. Крај тела теста функције ().

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

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

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

Предности коришћења показивача

Ево предности/користи коришћења показивача

  • Показивачи су променљиве које чувају адресе других променљивих у Ц ++.
  • Више функција се може мењати и враћати помоћу показивача.
  • Меморија се може динамички алоцирати и де-алоцирати помоћу показивача.
  • Показивачи помажу у поједностављивању сложености програма.
  • Брзина извршавања програма се побољшава коришћењем показивача.

Резиме:

  • Показивач се односи на променљиву адресу која садржи другу променљиву.
  • Сваки показивач има важећи тип података.
  • Показивач је симболички приказ меморијске адресе.
  • Показивачи дозвољавају програмима да симулирају позив по референци и стварају и манипулишу динамичким структурама података.
  • Низови и показивачи користе сродан концепт.
  • Име низа означава базу низа.
  • Ако желите да доделите адресу низа показивачу, немојте користити амперсанд (&).
  • Ако не постоји посебна адреса за додељивање променљиве показивача, доделите јој НУЛЛ.