Šioje pamokoje sužinosime apie C ++ rodykles ir jų darbą pavyzdžių pagalba.
C ++ rodyklės yra kintamieji, kurie saugo kitų kintamųjų atminties adresus.
Adresas C ++
Jei mūsų programoje yra kintamasis kintamasis, & var suteiks mums jo adresą atmintyje. Pavyzdžiui,
1 pavyzdys: Kintamų adresų spausdinimas C ++
#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; )
Rezultatas
Var1 adresas: 0x7fff5fbff8ac var2 adresas: 0x7fff5fbff8a8 var3 adresas: 0x7fff5fbff8a4
Čia 0x
pradžioje adresas yra šešioliktainės formos.
Atkreipkite dėmesį, kad pirmasis adresas skiriasi nuo antrojo 4 baitais, o antrasis adresas nuo trečiojo - 4 baitais.
Taip yra todėl, kad int
kintamojo dydis yra 4 baitai 64 bitų sistemoje.
Pastaba: Paleidus programą galite gauti ne tuos pačius rezultatus.
C ++ rodyklės
Kaip minėta pirmiau, žymekliai naudojami adresams, o ne reikšmėms išsaugoti.
Štai kaip mes galime paskelbti rodykles.
int *pointVar;
Čia mes paskelbėme int
tipo pointer pointVar .
Taip pat galime deklaruoti rodykles tokiu būdu.
int* pointVar; // preferred syntax
Paimkime kitą pavyzdžių deklaravimo pavyzdį.
int* pointVar, p;
Čia mes paskelbėme rodyklę pointVar ir normalų kintamąjį p.
Pastaba:*
operatorius naudojamas po duomenų tipo deklaruoti rodykles.
Adresų priskyrimas rodyklėms
Štai kaip galime priskirti adresus adresams:
int* pointVar, var; var = 5; // assign address of var to pointVar pointer pointVar = &var;
Čia 5
priskiriama kintamajam var. Var adresas priskiriamas pointVar žymekliui su kodu pointVar = &var
.
Gaukite vertę iš adreso naudodamiesi rodyklėmis
Norėdami gauti žymeklio nurodytą vertę, mes naudojame *
operatorių. Pavyzdžiui:
int* pointVar, var; var = 5; // assign address of var to pointVar pointVar = &var; // access value pointed by pointVar cout << *pointVar << endl; // Output: 5
Pirmiau pateiktame kode var adresas priskiriamas pointVar. Mes panaudojome *pointVar
gauti adresą išsaugotą vertę.
Kai *
jis naudojamas su rodyklėmis, jis vadinamas nukrypimo operacijų operatoriumi . Jis veikia su žymekliu ir suteikia vertę, kurią nurodo rodyklėje saugomas adresas. Tai yra *pointVar = var
,.
Pastaba: C ++ versijoje pointVar ir * pointVar yra visiškai skirtingi. Mes negalime padaryti kažko panašaus*pointVar = &var;
2 pavyzdys: C ++ rodyklių darbas
#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; )
Rezultatas
var = 5 var (& var) adresas = 0x61ff08 pointVar = 0x61ff08 pointVar nurodyto adreso turinys (* pointVar) = 5

Rodyklių rodoma kintanti vertė
Jei pointVar nurodo var adresą, mes galime pakeisti var reikšmę naudodami * pointVar.
Pavyzdžiui,
int var = 5; int* pointVar; // assign address of var pointVar = &var; // change value at address pointVar *pointVar = 1; cout << var << endl; // Output: 1
Čia, pointVar ir &var
turint tą patį adresą, var reikšmė taip pat bus pakeista pakeitus * pointVar.
3 pavyzdys: rodyklių rodomos vertės keitimas
#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; )
Rezultatas
var = 5 * pointVar = 5 Var reikšmės keitimas į 7: var = 7 * pointVar = 7 * pointVar vertės keitimas į 16: var = 16 * pointVar = 16
Dažniausios klaidos dirbant su rodyklėmis
Tarkime, mes norime, kad žymeklis „varPoint“ nurodytų var adresą. Tada
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;
Rekomenduojami skaitiniai :
- Kaip naudoti bendruosius duomenų tipo žymiklius naudojant tuščią rodyklę?
- Kaip vaizduoti masyvą naudojant žymeklį?
- Kaip naudotis rodyklėmis su funkcijomis?
- Kaip naudoti rodykles su struktūromis?