Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Pointeri si adrese

c



+ Font mai mare | - Font mai mic



Pointeri si adrese

Din moment ce un pointer sustine adresa unui obiect, este posibila

adresarea acelui obiect 'indirect' prin intermediul pointerului.



Sa presupunem ca x este o variabila, sa spunem int si ca px este

un pointer creat intr-un mod neprecizat. Operatorul & da adresa

unui obiect, astfel incit instructiunea

px=&x

asigneaza variabilei px adresa lui x acum, px inseamna 'pointeaza

pe x'. Operatorul & poate fi aplicat numai variabilelor si

elementelor unui tablou, constructii ca &(x+1) si &3 sint inter-

zise. Este deasemenea interzisa pastrarea adresei unei variabile

registru.

Operatorul unar * testeaza operandul sau ca adresa ultimului

semnal si acceseaza aceasta adresa pentru a aduce continutul

locatiei de la adresa respectiva. Astfel, daca y este tot un int

y = *px

asigneaza lui y, ori de cite ori este cazul continutul locatiei

unde pointeaza px. Astfel secventa

px = &x;

y = *px;

asigneaza lui y aceasi valoare ca si

y = x

Totodata este necesara declararea variabilelor care apar in sec-

venta:

int x, y;

int *px;

Declararea lui x si y este deja cunoscuta. Noua este declararea

pointerului px

int *px

este interpretata ca o mnemonica; aceasta inseamna ca *px este un

int, adica in momentul in care px apare in context sub forma

*px, este echivalenta cu a intilni o variabila de tip int. De

fapt, sintaxa declararii unei varaibile imita sintaxa expresiilor

in care ar putea sa apara respectiva variabila. Acest rationament

este util in toate cazurile care implica declaratii complicate. De

exemplu:

double atof(), *dp;

spune ca intr-o expresie atof() si *dp au valoare de tip double.

De notat declaratia implicita, ceea ce vrea sa insemne

ca un pointer este constrins sa pointeze o anumita categorie

de obiecte. (Functie de tipul obiectului pointat).

Pointerii pot aparea in expresii. De exemplu, daca px poin-

teaza pe intregul x atunci *px poate aprarea in orice context in

care ar putea apare x.

y = *px + 1

da lui y o valoare egala cu x plus 1.

printf('%dn', *px)

imprima o valoare curenta a lui x si

d = sqrt((double) *px)

face ca d = radical din x, care este fortat de tipul double

inainte de a fi transmis lui sqrt (vezi capitolul 2).

In expresii ca

y = *px + 1

operatorii unari * si & au prioritate mai mare decit cei

aritmetici, astfel aceasta expresie ori de cite ori pointerul px

avanseaza, aduna 1 si asigneaza valoarea lui y. Vom reveni pe

seama asupra a ceea ce inseamna

y = *(px + 1)

Referiri prin pointer pot apare si in partea stinga a asignarilor.

Daca px pointeaza pe x atunci

*px = 0

il pune pe x pe zero si

*px += 1

il incrementeaza pe x, ca si

(*px)++

In acest ultim exemplu parantezele sint necesare; fara ele, expre-

sia va incrementa pe px in loc sa incrementeze ceea ce pointeaza

px deoarece operatorii unari * si + sint evaluati de la dreapta la

stinga.

In sfirsit, daca pointerii sint variabile, ei pot fi manipu-

lati ca orice alta variabila. Daca py este un alt pointer pe int,

atunci

py = px

copiaza continutul lui px in py facind astfel ca py sa varieze

odata cu px.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1166
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved