Sunteți pe pagina 1din 4

Tipuri de data -pointer

Tipul de dată -pointer

Pointer ul este o variabila care memorează adresa unei alte variabile .

●Valoare x

●Adresa

●pointer

Un pointer se asociază întotdeauna unui tip de data numit tip de baza.

Declararea unui pointer se face cu sintaxa:

Tip_data *nume-pointer , unde tipul pointer ului este tipul de baza al datei de stocare la
adresa memorată de pointer.

" * " se numește operator de referință iar nume-pointer este identificatorul variabilei de
tip pointer.

Ex:

Int *a;

Float *r;

Char *q;

Fiind variabila și pointer ul este caracterizat de aceleași atribute ca orice variabila


nume,valoare și tip.

Valoarea unui pointer este adresa variabilei referit de către pointer.

Atribuirea de adresate este făcută de către sistemul de operare în funcție de locațiile de


memorie libere.

Lungimea,dimensiunea zonei de memorie alocată unui pointer,depinde de mai mulți


factori.Puntem determina dimensiunea zonei de memorie alocată unui pointer folosind
operatorul size of .

Int *p;

Cout <<sizeof(p);

Tipuri speciale de pointeri:

-pointeri fără tipi:se asociază tipului de data void.

-pointerii fără tip pot fi asociați oricărui tip de data și sunt utilizați pentru a putea reveni
la momente diferite,tipuri de baza diferite.

Pointer ul 0:

-are valoarea 0 și nu indica nici o adresa .

-spunem ca este un pointer în vânt. În loc de valoarea 0 putem oferi constanta simbolica
NULL.

Operatori specifici pentru variabile de tip pointer:

-operatorul de adresare(&) se aplică pe o variabila de memorie sau pe un element din


tablou și furnizează adresa variabilei de memorie respectiv adresa elementelor din
tablou.

Nu se poate aplica pe o expresie ,pe o constanta sau pe o variabila de tip pointer.

Operatorul de redirecționare se aplica pe o variabila de tip pointer și furnizează valoarea


variabilei de memorie a cărei adresa este indicata de către pointeri .

Concluzionând putem spune ca vom putea manipula informația de la adresa referit de


pointer prin operatorul de redirectare.

{int a=10,p=&a;

cout<<a<<endl;

cout<<*p<<endl;

cout<<&a<<endl;
return 0;

Observatie:

Operatorul de redirectare se poate folosi in ambii termeni ai unei operatii de atribuire.

{int a=10,b=20,*p=&a,*q=&b;

*q=*p;

cout<<a<<" "<<b<<endl;

cout<<*q<<" "<<*p<<endl;

return 0;

-la adresa referita de q vom inlocui valoarea variabilei retinute in b cu valoarea variabilei
a referita de p.

Adresa referita de p se va schimba cu adresa referita de q.

Observatie:

Stiind ca asociativitatea operatorilor binari este de la drapta la stanga ,operatorii de


incrementare trebuie folositi cu atentie.

*p++;

-incrementarea cu o adresa memorata in pointer-ul p:


++(*p);

Pe pointer-ul fara tip(void) nu vom putea aplica operatorul de redirectionare * deoarece


nu vom putea furniza tipul rezultatului.

Cum & este si operator de redirectare si operator de inmultire pentru a inmulti valori
memorate la 2 adrese de memorie indicate de 2 pointeri ,este obligatoriu sa folosim
paranteze.

Ex:

{int a,b=10,c=20,*p=&b,*q=&c;

a=(*p)*(*q);
cout<<a;

return 0;

Se citesc valorile a 2 variabile a caror adrese sunt referite de pointerii p si q.Sa se


calculeze suma si produsul celor 2 variabile.

{int *p,*q,S,p1,a,b;

p=&a;q=&b;

cout<<"a=";

cin>>*p;

cout<<"b=";

cin>>*q;

S=(*p)+(*q);

cout<<"S="<<S<<endl<<"P1="<<p1;

return 0;

S-ar putea să vă placă și