У овом упутству ћемо научити о показивачима на Ц ++ и њиховом раду уз помоћ примера.
У Ц ++, показивачи су променљиве које чувају меморијске адресе других променљивих.
Адреса на Ц ++
Ако у нашем програму имамо променљиву вар, & вар ће нам дати своју адресу у меморији. На пример,
Пример 1: Штампање променљивих адреса на Ц ++
#include using namespace std; int main() ( // declare variables int var1 = 3; int var2 = 24; int var3 = 17; // print address of var1 cout << "Address of var1: "<< &var1 << endl; // print address of var2 cout << "Address of var2: " << &var2 << endl; // print address of var3 cout << "Address of var3: " << &var3 << endl; )
Оутпут
Адреса вар1: 0к7ффф5фбфф8ац Адреса вар2: 0к7ффф5фбфф8а8 Адреса вар3: 0к7ффф5фбфф8а4
Овде 0x
на почетку представља адреса је у хексадецималном облику.
Приметите да се прва адреса разликује од друге за 4 бајта, а друга адреса од треће за 4 бајта.
То је зато што је величина int
променљиве 4 бајта у 64-битном систему.
Напомена: Можда нећете добити исте резултате када покренете програм.
Ц ++ показивачи
Као што је горе поменуто, показивачи се користе за чување адреса, а не вредности.
Ево како можемо прогласити показиваче.
int *pointVar;
Овде смо прогласили показивач поинтВар int
типа.
Такође можемо пријавити показиваче на следећи начин.
int* pointVar; // preferred syntax
Узмимо још један пример проглашавања показивача.
int* pointVar, p;
Овде смо прогласили показивач поинтВар и нормалну променљиву п.
Напомена:*
оператор користи након тип података да прогласи показивачима.
Додељивање адреса показивачима
Ево како можемо доделити адресе показивачима:
int* pointVar, var; var = 5; // assign address of var to pointVar pointer pointVar = &var;
Овде 5
је додељена променљивој вар. И, адреса вар се додељује показивачу поинтВар са кодом pointVar = &var
.
Добијте вредност из адресе помоћу показивача
Да бисмо добили вредност на коју указује показивач, користимо *
оператор. На пример:
int* pointVar, var; var = 5; // assign address of var to pointVar pointVar = &var; // access value pointed by pointVar cout << *pointVar << endl; // Output: 5
У горњем коду адреса вар додељена је поинтВар. Користили смо *pointVar
за добијање вредности сачуване на тој адреси.
Када *
се користи са показивачима, назива се оператор преусмеравања . Функционише на показивачу и даје вредност на коју указује адреса сачувана у показивачу. Односно *pointVar = var
.
Напомена: У Ц ++, поинтВар и * поинтВар се потпуно разликују. Не можемо учинити нешто слично*pointVar = &var;
Пример 2: Рад показивача на Ц ++
#include using namespace std; int main() ( int var = 5; // declare pointer variable int* pointVar; // store address of var pointVar = &var; // print value of var cout << "var = " << var << endl; // print address of var cout << "Address of var (&var) = " << &var << endl << endl; // print pointer pointVar cout << "pointVar = " << pointVar << endl; // print the content of the address pointVar points to cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl; return 0; )
Оутпут
вар = 5 Адреса вар (& вар) = 0к61фф08 поинтВар = 0к61фф08 Садржај адресе на коју указује поинтВар (* поинтВар) = 5

Промена вредности коју указују показивачи
Ако поинтВар указује на адресу вар, можемо променити вредност вар користећи * поинтВар.
На пример,
int var = 5; int* pointVar; // assign address of var pointVar = &var; // change value at address pointVar *pointVar = 1; cout << var << endl; // Output: 1
Овде, поинтВар и &var
имају исту адресу, вредност вар ће се такође променити када се промени * поинтВар.
Пример 3: Промена вредности на коју указују показивачи
#include using namespace std; int main() ( int var = 5; int* pointVar; // store address of var pointVar = &var; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of var to 7:" << endl; // change value of var to 7 var = 7; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of *pointVar to 16:" << endl; // change value of var to 16 *pointVar = 16; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl; return 0; )
Оутпут
вар = 5 * поинтВар = 5 Промена вредности вар у 7: вар = 7 * поинтВар = 7 Промена вредности * поинтВар у 16: вар = 16 * поинтВар = 16
Уобичајене грешке у раду са показивачима
Претпоставимо, желимо да показивач варПоинт указује на адресу вар. Онда,
int var, *varPoint; // Wrong! // varPoint is an address but var is not varPoint = var; // Wrong! // &var is an address // *varPoint is the value stored in &var *varPoint = &var; // Correct! // varPoint is an address and so is &var varPoint = &var; // Correct! // both *varPoint and var are values *varPoint = var;
Препоручена читања :
- Како се користе генерички показивачи типа података помоћу воид показивача?
- Како представити низ помоћу показивача?
- Како користити показиваче са функцијама?
- Како користити показиваче са структурама?