pointers pointer operations c
Интензивно проучавање показивача и њихове употребе у Ц ++.
Показивач је једна од најмоћнијих карактеристика језика Ц ++. Показивач помаже у манипулисању променљивим преко његове адресе.
како отворити епс датотеке на Виндовсима
У овом упутству детаљно ћемо истражити све о показивачима и њиховој употреби у Ц ++-у.
=> Овде припазите на једноставне серије обуке за Ц ++.
Шта ћете научити:
- Шта је показивач?
- Аритметика показивача
- Нулл Анд Воид показивачи
- Низови и показивачи
- Низ показивача
- Поинтер Оф Поинтерс
- Преношење показивача на функције
- Показивачи функција
- Закључак
- Препоручено читање
Шта је показивач?
Показивач је променљива која садржи адресу меморијске локације. Знамо да све променљиве које декларишемо имају одређену адресу у меморији. Декларишемо променљиву показивача да указује на ове адресе у меморији.
Општа синтакса за декларисање променљиве показивача је:
datatype * variable_name;
На пример, изјава инт * птр;
То значи да је птр показивач који показује на променљиву типа инт. Отуда променљива показивача увек садржи меморијску локацију или адресу. Погледајмо рад променљивих показивача у наставку.
Узмимо у обзир да имамо следеће изјаве:
Int p, *ptr; //declare variable p and pointer variable ptr p = 4; //assign value 4 to variable p ptr = &p; //assign address of p to pointer variable ptr
У сећању, ове декларације ће бити представљене на следећи начин:
Ово је интерни приказ показивача у меморији. Када променљиву адресе доделимо променљиву показивача, она указује на променљиву као што је приказано у горњој представи.
Како птр има адресу променљиве п, * птр ће дати вредност променљиве п (променљива на коју показује променљива показивача птр).
Белешка: Оператор * који користимо са показивачем користи се да означи да је променљива показивача.
Погледајмо неке концепте показивача који се користе у Ц ++.
Аритметика показивача
Знамо да променљива показивача увек показује на адресу у меморији. Међу операцијама које можемо да изведемо имамо следеће аритметичке операције које се изводе на показивачима.
- Оператор повећања (++)
- Оператор смањења (-)
- Сабирање (+)
- Одузимање (-)
Погледајмо употребу ових операција у Примеру програма.
#include #include using namespace std; int main() { int myarray(5) = {2, 4,6, 8,10}; int* myptr; myptr = myarray; cout<<'First element in the array :'<<*myptr< Излаз:
Први елемент у низу: 2
следећи елемент у низу: 4
следећи елемент у низу: 6
следећи елемент у низу: 4
следећи елемент у низу: 2
Видели смо аритметичке операције изведене на показивачима. Имајте на уму да оператор прираста ++ повећава показивач и показује на следећи елемент у низу. Слично томе, оператор смањења смањује променљиву показивача за 1 тако да показује на претходни елемент у низу.
Такође користимо + и - операторе. Прво смо додали 1 променљивој показивача. Резултат показује да показује на следећи елемент у низу. Слично томе - оператор чини променљиву показивача тако да указује на претходни елемент у низу.
Поред ових аритметичких оператора, можемо користити и операторе поређења попут ==,.
Нулл Анд Воид показивачи
Ако у случају, променљивој показивача није додељена адреса променљиве, тада је добра пракса доделити НУЛЛ вредност променљивој показивача. Променљива показивача са НУЛЛ вредношћу назива се НУЛЛ показивач.
најбољи бесплатни софтвер за убрзавање рачунара
Нулти показивач је стални показивач са вредношћу нула дефинисаном у заглављу иостреам. Меморију на адреси 0 резервише оперативни систем и не можемо да приступимо овој локацији.
Коришћењем нулл показивача можемо избећи злоупотребу неискоришћених показивача и спречити да променљиве показивача имају додељене неке вредности смећа.
Празни показивачи су посебни показивачи који указују на вредности без типа. Показивачи празнина су флексибилнији јер могу указати на било коју врсту. Али они се не могу директно преусмерити. За дереференцирање, воид показивач треба претворити у показивач који показује на вредност са конкретним типом података.
Показали смо рад показивача НУЛЛ и воид у следећем примеру кода.
#include #include using namespace std; int main() { int intvar = 10; char c = 'A'; void* vptr; int* myptr = NULL; cout<<'NULL pointer value :'< Излаз:
НУЛЛ вредност показивача: 0
Празни показивач вптр указује на: А.
Показивач празнине вптр указује на: 10
У горњем програму прво декларишемо целобројни показивач коме је додељена вредност НУЛЛ. Када исписујемо овај показивач, видимо да је вредност 0 као што смо раније говорили.
Следеће, проглашавамо празним показивач. Прво, овом празном показивачу додељујемо адресу променљиве знакова. Затим додељујемо воид показивач на показивач на знак и куцамо га цхар *. Даље, исписујемо вредност цхарптр која показује на цхар А који је био променљива карактера коју смо раније декларисали и на коју показује показивач воид.
Даље, доделили смо целобројну променљиву воид показивачу, а затим изводимо исте кораке преусмеравања овог воид показивача помоћу целобројног показивача.
Низови и показивачи
Низови и показивачи су чврсто повезани једни с другима. Знамо да име низа показује на први елемент низа и ово је стални показивач.
Овај показивач можемо доделити променљивој показивача, а затим приступити низу декрементирањем показивача или коришћењем оператора индекса.
Видећемо ову повезаност између променљиве показивача и низа у следећем примеру кода.
#include #include using namespace std; int main() { int myarray(5) = {1, 1, 2, 3, 5}; int* ptrvar; ptrvar = myarray; for(int i=0;i<5;i++) { cout<<*ptrvar<<' '; ptrvar++; } return 0; }
Излаз:
1 1 2 3 5
У горњем програму додељујемо име низа променљивој показивача. Како име низа показује на први елемент у низу, можемо читати садржај читавог низа помоћу променљиве показивача и повећавати га помоћу оператора ++. Ово је приказано у излазу.
Низ показивача
Понекад нам треба више од једне променљиве показивача у програму. Уместо да декларишемо сваку појединачну променљиву показивача, можемо прогласити низ показивача.
Узмимо одмах пример за демонстрирање низа показивача.
#include #include using namespace std; int main() { int myarray(5) = {2,4,6,8,10}; int *ptr(5); //array of pointers for(int i=0;i<5;i++){ ptr(i) = &myarray(i); } for (int i = 0; i < 5; i++) { cout << 'Value of myarray(' << i << ') = '; cout << *ptr(i) << endl; } return 0; }
Излаз:
Вредност миарраи (0) = 2
Вредност миарраи (1) = 4
Вредност миарраи (2) = 6
Вредност миарраи (3) = 8
Вредност миарраи (4) = 10
У горњој декларацији,
инт * птр (5);
Можемо протумачити као; птр је низ од 5 целобројних показивача. Отуда ће сваки елемент птр усмерити на променљиву типа интегер.
Користимо целобројни низ и додељујемо адресу сваког елемента низа сваком од птр елемената. Затим приказујемо садржај низа птр изношењем “* птр (и)”.
Поинтер Оф Поинтерс
Показивач показивача није ништа друго до вишеструка индиректност. То је нека врста ланца показивача. Када дефинишемо показивач показивача, први показивач има адресу другог показивача, који заузврат има адресу променљиве на коју показује.
У сећању, ово ће бити представљено као:

Показивач показивача се декларише на следећи начин:
int** intptr;
Директно узимамо Пример кода да бисмо боље разумели показивач показивача.
#include #include using namespace std; int main() { int *vptr; int ** intptr; int var = 10; vptr = &var; intptr = &vptr; cout<<'Variable var: '< Излаз:
Варијабилна вар: 10
Показивач на променљиву: 10
Показивач на Показивач на променљиву: 10
У горњем програму декларишемо целобројну променљиву, целобројни показивач и показивач показивача на цели број. Као што је приказано у програму, показивачкој променљивој додељује се вредност променљиве. Показивачу променљиве показивача додељује се адреса променљиве показивача.
На крају, исписујемо три променљиве које приказују исту вредност 10 једнаку целобројној променљивој.
Преношење показивача на функције
Просљеђивање показивача на функцију је исто као и друге технике просљеђивања параметара код којих преносимо променљиве показивача на функцију.
Поново посећујемо за заменом две вредности и модификујемо је тако да променљиве показивача прослеђују као параметре.
#include #include using namespace std; void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a, b; cout<>a>>b; cout<<'a = '< Излаз:
Унесите вредности које треба заменити: 3 2
а = 3 б = 2
Замењене вредности
а = 2 б = 3
Као што је приказано у програму, вредности које треба заменити преносимо као целобројне променљиве. Формални параметри су дефинисани као променљиве показивача. Као резултат овога, промене направљене на променљивим унутар функција одражавају се и у позивајућој функцији.
Показивачи функција
на исти начин, како имамо показиваче на променљиве, низове итд., тако можемо имати и показиваче на функције. Али разлика је у томе што показивач функције показује на извршни код, а не на податке попут променљивих или низова.
Узимамо Пример за демонстрацију показивача на функцију.
#include #include using namespace std; void displayVal(int a) { printf('Value of a is %d
', a); } int main() { void (*func_ptr)(int) = &displayVal; (*func_ptr)(100); return 0; }
Излаз:
Вредност а је 100
најбољи софтвер за поправку рачунара за Виндовс 10
У горњем програму имамо функцију ‘дисплаиВал’ која само исписује целобројну вредност која јој је прослеђена. У главној функцији дефинисали смо показивач функције ‘фунц_птр’ који узима инт као аргумент и враћа тип воид.
воид (* фунц_птр) (инт)
Белешка: Морамо приложити показивач функције унутар (). Ако га изоставимо, постаће прототип функције.
Овом показивачу функције смо доделили адресу функције ‘дисплаиВал’. Затим помоћу овог показивача функције „фунц_птр“ прослеђујемо вредност аргумента 100 која је еквивалентна позивању дисплаиВал са аргументом 100.
Сада ако имамо другу функцију са истим прототипом, онда можемо користити исти показивач функције тако што ћемо му доделити адресу функције. Ово је главна употреба показивача функција.
Закључак
Ово је све о показивачима, њиховим дефиницијама и употреби у Ц ++.
У нашем следећем упутству сазнаћемо више о референцама на Ц ++. Референце се такође посебно користе у језику Ц ++ и често се користе као алиаси за променљиве.
=> Кликните овде за апсолутну Ц ++ серију тренинга.
Препоручено читање