Documente Academic
Documente Profesional
Documente Cultură
Pointeri
Pointeri
Un pointer este o variabila destinata stocarii adresei de inceput a unui obiect din
memorie.
Adresa este un numar intreg pozitiv, iar obiectul poate fi o constanta, o variabila, un
tablou, sau o structura de date mai complexa.
Tipuri de pointeri
- pointeri de date: stocheaza adresa unei variabile sau constante din memorie;
- pointeri de functii: stocheaza adresa codului executabil din functii;
- pointeri generici/void: stocheaza adresa unui obiect oarecare;
Declaratii
- pointeri de date: tip *nume_pointer;
- pointeri generici: void *nume_pointer;
Exemple
int *p;
float var, *p;
int *tab[10];
void *pg;
Operatori specifici pointerilor
- operatorul "&" (adresare/referentiere); se foloseste pentru aflarea adresei unui obiect;
combinatie: &nume_obiect;
ex.: int a, *p=&a; // spunem ca p este un pointer la variabila a;
- operatorul "*" (indirectare/dereferentiere); se foloseste pentru vizualizarea sau
modificarea continutului aflat la adresa dintr-un pointer;
combinatie: *nume_pointer;
ex.: 1) cout << *p;
2) int a=4, *p=&a;
*p=5;
exemplu:
int a, *p=&a;
//sau
int a,*p;
p=&a;
Utilizarea operatorului (cast)
- (tip)nume_pointer => se foloseste pentru a converti adresa continuta in pointer in tip;
- (tip*)nume_pointer => se foloseste pentru a converti tipul pointerul/variabilei la noul tip;
- *(tip*)nume_pointer => se foloseste (in cazul pointerilor void) pentru a modifica
valoarea continuta la adresa pe care o pointeaza;
In limbajul C/C++ se permite ca orice tip de pointer sa pointeze oriunde in memorie,
tipul pointerului determinand modul in care va fi tratat obiectul pointat atunci cand este
prelucrat prin intermediul pointerului.
Exemplu:
1)
int a;
double *p=&a;
*p=4.5 //voi scrie 8 octeti => rezultatul va fi eronat!
2)
double a;
int *p=&a;
*p=8; // voi scrie 4 octeti => rezultatul va fi eronat!
Cand un pointer de un tip pointeaza un obiect de un alt tip si cand se efectueaza
operatii de editare/vizualizare a continutului, pot aparea erori.De aceea, un pointer de un
tip nu va fi folosit sa pointeze o data de alt tip.
Acest mod de pointare este posibil in CodeBlocks fara conversii explicite, insa in
Visual Studio este necesar ca variabila din stanga sa se converteasca la tipul var. din
dreapta:
int a=8, *p1=&a;
float *p2=(float *)&a;
Pointerii generici nu sunt asociati unui anumit tip de date.Dimensiunea zonei de