Indicatori C ++

În acest tutorial, vom afla despre indicii în C ++ și modul lor de lucru cu ajutorul unor exemple.

În C ++, indicii sunt variabile care stochează adresele de memorie ale altor variabile.

Adresa în C ++

Dacă avem o variabilă var în programul nostru, & var ne va da adresa în memorie. De exemplu,

Exemplul 1: Tipărirea adreselor variabile în 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; )

Ieșire

 Adresa var1: 0x7fff5fbff8ac Adresa var2: 0x7fff5fbff8a8 Adresa var3: 0x7fff5fbff8a4

Aici, 0xla început reprezintă adresa este în formă hexazecimală.

Observați că prima adresă diferă de a doua cu 4 octeți, iar a doua adresă diferă de a treia cu 4 octeți.

Acest lucru se datorează faptului că dimensiunea unei intvariabile este de 4 octeți într-un sistem pe 64 de biți.

Notă: Este posibil să nu obțineți aceleași rezultate atunci când rulați programul.

Indicatori C ++

Așa cum s-a menționat mai sus, pointerele sunt folosite pentru a stoca adrese mai degrabă decât valori.

Iată cum putem declara indicii.

 int *pointVar;

Aici, am declarat un pointer pointVar de inttip.

De asemenea, putem declara indicii în felul următor.

 int* pointVar; // preferred syntax

Să luăm un alt exemplu de declarare a indicilor.

 int* pointVar, p;

Aici, am declarat un pointer pointVar și o variabilă normală p.
Notă:* Operatorul este utilizat după tipul de date pentru indicii DECLARE.

Atribuirea adreselor către indicatori

Iată cum putem atribui adrese pointerelor:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointer pointVar = &var;

Aici, 5este atribuită variabilei var. Și, adresa lui var este atribuită indicatorului pointVar cu codul pointVar = &var.

Obțineți valoarea de la adresa folosind pointeri

Pentru a obține valoarea indicată de un pointer, folosim *operatorul. De exemplu:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointVar = &var; // access value pointed by pointVar cout << *pointVar << endl; // Output: 5

În codul de mai sus, adresa var este atribuită punctului Var. Am folosit *pointVarpentru a obține valoarea stocată în acea adresă.

Când *este utilizat cu pointeri, se numește operator de dereferință . Funcționează pe un pointer și dă valoarea indicată de adresa stocată în pointer. Adică *pointVar = var.

Notă: În C ++, pointVar și * pointVar sunt complet diferite. Nu putem face ceva de genul*pointVar = &var;

Exemplul 2: Funcționarea pointerelor C ++

 #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; )

Ieșire

 var = 5 Adresa var (& var) = 0x61ff08 pointVar = 0x61ff08 Conținutul adresei indicat de pointVar (* pointVar) = 5
Funcționarea indicatorilor C ++

Modificarea valorii indicată de indicatori

Dacă pointVar indică adresa lui var, putem modifica valoarea lui var folosind * pointVar.

De exemplu,

 int var = 5; int* pointVar; // assign address of var pointVar = &var; // change value at address pointVar *pointVar = 1; cout << var << endl; // Output: 1

Aici, pointVar și &varau aceeași adresă, valoarea lui var va fi, de asemenea, modificată atunci când * pointVar este modificat.

Exemplul 3: Modificarea valorii indicate de indicatoare

 #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; )

Ieșire

 var = 5 * pointVar = 5 Modificarea valorii var la 7: var = 7 * pointVar = 7 Modificarea valorii * pointVar la 16: var = 16 * pointVar = 16 

Greșeli frecvente atunci când lucrați cu indicatori

Să presupunem că vrem ca un pointer varPoint să indice adresa var. Apoi,

 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;

Lecturi recomandate :

  • Cum se utilizează indicatori generici de tip date folosind un pointer gol?
  • Cum se reprezintă o matrice folosind un pointer?
  • Cum se folosesc indicatorii cu funcții?
  • Cum se folosesc indicatorii cu structuri?

Articole interesante...