C ++ rodyklės

Š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 0xpradž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 intkintamojo 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 inttipo 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 5priskiriama 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 *pointVargauti 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
C ++ rodyklių naudojimas

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 &varturint 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?

Įdomios straipsniai...