Pointeri si adrese
Deoarece un pointer contine adresa unui obiect, cu ajutorul lui putem avea acces, in mod indirect, la acea variabila (obiect).
Sa presupunem ca x este o variabila de tip 646d34g intreg si px un pointer la aceasta variabila. Atunci aplicind operatorul unar & lui x, instructiunea:
px = &x;
atribuie variabilei px adresa variabilei x; in acest fel spunem ca px indica (pointeaza) spre x
y = *px;
atribuie variabilei y continutul locatiei pe care o indica px
Evident toate variabilele care sint implicate in aceste instructiuni trebuie declarate. Aceste declaratii sint:
int x,y;
int *px;
Declaratiile variabilelor x si y sint deja cunoscute. Declaratia pointerului px este o noutate. A doua declaratie indica faptul ca o combinatie de forma *px este un intreg, iar variabila px care apare in contextul *px este echivalenta cu un pointer la o variabila de tip intreg. In locul tipului intreg poate aparea oricare dintre tipurile admise in limbaj si se refera la obiectele pe care le indica px
Pointerii pot aparea si in expresii, ca de exemplu in expresia urmatoare:
y = *px + 1;
unde variabilei y i se atribuie continutul variabilei x plus
Instructiunea:
d = sqrt((double)*px);
are ca efect convertirea continutului variabilei x pe care o indica px in tip double si apoi depunerea radacinii patrate a valorii astfel convertite in variabila d
Referiri la pointeri pot aparea de asemenea si in partea stinga a atribuirilor. Daca, de exemplu, px indica spre x, atunci:
*px = 0;
atribuie variabilei x valoarea zero, iar:
*px += 1;
incrementeaza continutul variabilei x cu , ca si in expresia:
In acest ultim exemplu parantezele sint obligatorii deoarece, in lipsa lor, expresia ar incrementa pe px in loc de continutul variabilei pe care o indica (operatorii unari au aceeasi precedenta si sint evaluati de la dreapta spre stinga).
|