ALOCAREA DINAMICA A MEMORIEI
POINTERI
Un pointer este o variabila care are ca valori adrese. Pointerii se utilizeaza pentru a face referire la date cunoscute prin adresele lor. Astfel, daca p este o variabila de tip pointer care are ca valoare adresa lui x, atunci *p reprezinta chiar valoarea lui x.
Fie de exemplu:
int x,y;
atunci daca p are ca valoare adresa lui x, atribuirea:
y=x+100
este identica cu:
y=*p+100
Analog, atribuirea:
x=3
este identica cu:
*p=3.
În constructia *p utilizata mai sus, caracterul * se considera ca fiind un operator unar care furnizeaza valoarea din zona de memorie a carei adresa este continuta în p.
Operatorul unar * are aceeasi prioritate ca si ceilalti operatori unari din C si se asociaza de la dreapta spre stânga.
Daca p contine adresa zonei de memorie alocata lui x, vom spune ca p pointeaza spre x. De asemenea, daca p are ca valoare adresa de început a unei zone de memorie care contine o data de tipul tip, atunci vom spune ca p pointeaza spre tip.
În legatura cu notiunea de pointer, în limba româna se utilizeaza si alte denumiri:
referinta
localizator
reper
indicator de adresa
Pentru a atribui o adresa unei variabile de tip pointer se poate folosi operatorul unar (. Astfel, daca dorim ca p sa pointeze spre x(sa aiba ca valoare adresa lui x), atunci putem utiliza atribuirea:
p=(x.
Operatorul unar ( este numit operator adresa sau de referentiere. Operatorul unar * îl vom numi operator de inderectare sau de dereferentiere. Ultima denumire decurge din efectul invers al acestuia fata de operatorul unar (. Astfel, expresia:
*(x
are aceeasi valoare ca si operandul x.
Declaratia de pointeri si tipul pointer
Un pointer se declara ca orice variabila, cu singura deosebire ca numele este precedat de caracterul *. Astfel, daca dorim sa declaram variabila p utilizata mai sus pentru a pastra adresa lui x, vom folosi declaratia:
int *p
Tipul int stabileste faptul ca p contine adrese de zone de memorie în care se pastreaza date de tip i