Tema laboratorului: POINTERI Pointerii sunt variabile care au ca valori adresele altor variabile (obiecte). Din punctul de vedere al continutului zonei de memorie adresate, se disting urmatoarele categorii de pointeri: q pointeri de date (obiecte) - contin adresa unei variabile din memorie; q pointeri generici (numiti si pointeri void) - contin adresa unui obiect oarecare, de tip neprecizat; q pointeri de functii (vor fi prezentati ulterior)- contin adresa codului executabil al unei functii. Exemplu: int x, y, ptr; // ptr- variabila pointer catre un int; x,y-variabile predefinite, simple, de tip int x=5; cout<<"Adresa variabilei x este:"<<&x<<'n'; cout<<"Valoarea lui x:"<<x<<'n'; ptr=&x; // atribuire: variabila ptr contine adresa variabilei x cout<<"Variabila pointer ptr are valoarea:"<<ptr; cout<<" si adreseaza obiectul:"<< ptr<<'n'; y= ptr; cout<<"y="<<y<<'n'; // y=5 x=4; cout<<"x="<<x<<'n'; cout<<" ptr="<< ptr<<'n'; // x si ptr reprezinta acelasi obiect, un intreg cu valoarea 4 x=70; // echivalenta cu ptr=70; y=x+10; // echivalenta cu y= ptr+10 Variabilele pointer, alaturi de operatorii de referentiere si de deferentiere, pot apare in expresii. Exemple: int x, y, q; q=&x; q=8; // echivalenta cu x=8; q=&5; // invalida - constantele nu au adresa x=9; // invalida - x nu este variabila pointer x=&y; //invalida: x nu este variabila pointer, deci nu poate fi folosita cu operatorul de indirectare y= q + 3; // echivalenta cu y=x+3; q = 0; // seteaza x pe 0 q += 1; // echivalenta cu ( q)++ sau cu x++ int r; r = q; /* copiaza continutul lui q (adresa lui x) in r, deci r va pointa tot catre x (va contine tot adresa lui x)*/ double w, r = &w, r1, r2; r1= &w; r2=r1; cout<<"r1="<<r1<<'n'; //afiseaza valoarea pointerului r1 (adresa lui w) cout<<"&r1="<<&r1<<'n'; // afiseaza adresa variabilei r1 cout<<" r1= "<< r1<<'n'; double z= r1; // echivalenta cu z=w cout<<"z="<<z<<'n'; Exemplu: void v1, v2; int a, b, q1, q2; q1 = &a; q2 = q1; v1 = q1; q2 = v1; // eroare: unui pointer cu tip nu i se poate atribui un pointer generic q2 = (int ) v1; double s, ps = &s; int c, l; void sv; l = (int ) sv; ps = (double ) sv; (char ) sv = 'a'; /*Interpretare: adresa la care se gaseste valoarea lui sv este interpretata ca fiind adresa zonei de memorie care contine o data de tip char. */ Exemplu: int a, pa, pb; cout<<"&a="<<&a<<'n'; pa=&a; cout<<"pa="<<pa<<'n'; cout<<"pa+2"<<pa+2<<'n'; pb=pa++; cout<<"pb="<<pb<<'n'; int i=pa-pb; cout<<"i="<<i<<'n';
După plată vei primi prin email un cod de download pentru a descărca gratis oricare alt referat de pe site (vezi detalii).