Î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, 0x
la î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 int
variabile 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 int
tip.
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, 5
este 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 *pointVar
pentru 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

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 &var
au 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?