Ц ++ показивачи

У овом упутству ћемо научити о показивачима на Ц ++ и њиховом раду уз помоћ примера.

У Ц ++, показивачи су променљиве које чувају меморијске адресе других променљивих.

Адреса на Ц ++

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

Пример 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;

Препоручена читања :

  • Како се користе генерички показивачи типа података помоћу воид показивача?
  • Како представити низ помоћу показивача?
  • Како користити показиваче са функцијама?
  • Како користити показиваче са структурама?

Занимљиви Чланци...