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

Преглед садржаја:

Anonim

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

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

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

У овом упутству за Ц ++ научићете:

  • Шта су показивачи?
  • Адресе у Ц ++
  • Синтакса декларације показивача
  • Референтни оператер (&) и Деференце оператор (*)
  • Показивачи и низови
  • НУЛЛ показивач
  • Показивачи променљивих
  • Примена показивача
  • Предности употребе показивача

Адресе у Ц ++

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

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

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

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

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

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

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

Ево примера важећих декларација показивача у Ц ++:

int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character

Референтни оператер (&) и Деференце оператор (*)

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

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

На пример:

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

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

Оператор преусмеравања (*) ће вратити 5.

Пример 1:

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

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

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

На пример:

p = arr;

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

p = &arr;

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

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

int arr [20];int * ip;

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

ip = arr;

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

Пример 2:

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

#include using namespace std;int main() {int *ip;int arr[] = { 10, 34, 13, 76, 5, 46 };ip = arr;for (int x = 0; x < 6; x++) {cout << *ip << endl;ip++;}return 0;}

Излаз:

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

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

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

НУЛЛ показивач

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

Пример 3:

#include using namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}

Излаз:

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

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

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

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

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

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

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

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

int *p;

Или,

int* p;

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

Садржи меморијску адресу.

Звездица је оператор преусмеравања који значи показивач на.

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

Пример 4:

#include using namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}

Излаз:

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

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

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

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

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

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

Пример 5:

#include using namespace std;void test(int*, int*);int main() {int a = 5, b = 5;cout << "Before changing: << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;test(&a, &b);cout << "\nAfter changing" << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;}void test(int* n1, int* n2) {*n1 = 10;*n2 = 11;}

Излаз:

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

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

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

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

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

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

Предности употребе показивача

Ево предности и користи употребе показивача

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

Резиме:

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