Extras din referat
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 în 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) în 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’;
Preview document
Conținut arhivă zip
- Pointeri.doc