Pointeri.


     Ne propunem să înţelegem în acest capitol cea mai importantă noţiune a limbajului C.
Este vorba de pointer.
Pentru a stăpâni modul de funcţionare al limbajului C, trebuie înţeleasă foarte bine
noţiunea de pointer.
O variabilă de tip pointer reţine o adresă de memorie la care se află o informaţie (un
caracter, un întreg, un şir etc.).
O variabilă de tip pointer se declară sub forma: tip *numepointer. De exemplu, o
variabilă de tip pointer către tipul int se declară astfel: int *pint. Variabila pint va reţine adresa de
memorie la care se află stocată o dată de tip int.
23
Revenind la declaraţia generală tip *numepointer, numepointer este o variabilă de tipul
tip* şi memorează o adresă de memorie, la care este reţinută o informaţie de tipul tip. O adresă
se memorează pe 4 octeţi şi în consecinţă sizeof(tip*) este 4.
Putem aplica operatorul * unei valori de tip pointer pentru a afla valoarea care se află la
adresa reţinută de pointer. Astfel, *numepointer reprezintă valoarea de tipul tip aflată în memorie
la adresa numepointer.
Adresa la care se află zona de memorie rezervată unei variabile se poate afla folosind
operatorul &. Cu alte cuvinte, operatorul & este inversul operatorului *. În consecinţă, pentru o
variabilă var de tipul tip are sens o atribuire de forma numepointer=&var. De asemenea, se poate
face atribuirea var=*numepointer. Operatorul * anulează pe & şi & anulează pe *, adică *&var
este totuna cu var, iar &*numepointer este acelaşi lucru cu numepointer.
Pentru valori de tip pointer funcţionează operatorii: =, +, -, +=, -=, ++, -- şi !. De exemplu
putem scrie numepointer+=10, sau numepointer=&var-1.
După aplicarea operatorului += pointerului numepointer sub forma numepointer+=10,
pointerul va reţine adresa aflată cu 10 căsuţe mai la dreapta în memorie faţă de adresa iniţială. O
căsuţă de memorie are sizeof(tip) octeţi, unde tip este tipul de dată către care pointează
numepointer. Cu alte cuvinte, în urma atribuirii numepointer+=10, variabila numepointer va
reţine adresa de memorie aflată cu 10*sizeof(tip) octeţi la dreapta adresei de memorie iniţiale din
numepointer.
De reţinut este şi faptul că pentru valori de tip pointer nu funcţionează operatorii: *, /, %,
adică pointerii nu se pot înmulţi, împărţi cu alte valori.

0 comentarii:

Trimiteți un comentariu