Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Pointeri – Legatura intre pointeri si tablouri
- • O variabila de tip pointer poate avea ca valori adrese de memorie
- • Declararea unei variabile de tip pointer:
- • tip *nume;
- nume = numele var. de tip pointer
- tip = reprezinta tipul valorii ce poate fi memorata la adresa indicate de pointer-ul nume
- Obs: spunem ca tip este tipul de baza al pointerului
- • ex: int *p; //s-a declarat var. pointer cu numele p care poate avea ca valoare adresa unei zone de memorie la care se poate memora un numar intreg
- • Operatori pt variabile de tip pointer
- • Operator de referentiere / adresa (&)
- Furnizeaza adresa de memorie a unei variabile
- • Ex: int x, *p;
- • p=&x; //var. pointer p primeste ca valoare adresa de memorie a var. x
- • Operator de dereferentiere(*)
- Se aplica unei var de tip pointer si furnizeaza ca rezultat valoarea aflata in memorie la adresa indicata de pointerul p
- • Ex: int x=10, *p;
- • p=&x;
- • cout<<x; // se afiseaza 10
- • cout<<*p; // se afiseaza 10
- • Operator de atribuire (=)
- Unei var de tip pointer I se poate atribui:
- • Adresa unei alte variabile de memorie (prin aplicarea operatorului adresa &)
- • Valoarea unei alte variabile de tip pointer, avand acelasi tip de baza
- o Ex: int *p, *q;
- o float *k;
- o p=q; // e corect, OK
- o p=k; //nu e correct, pointeri cu tipul de baza diferit, !OK
- • Valoarea NULL (poinerul nul)
- o are ca semnificatie ca el nu contine nicio adresa de memorie
- • Incrementarea si decrementarea unui pointer (++; --)
- valoarea pointerului creste, respectiv scade cu sizeof(tip) octeti
- • unde tip=tipul de baza al pointerului
- • ex: char s[]=”program”, *p;
- • //s = p|r|o|g|r|a|m|\0
- • p=*s[4];
- • cout<<*p; // se va afisa ‘r’
- • p++; //p va avea ca valoarea adresa elementului s[5] (p==&s[5])
- • cout<<*p;//se va afisa ‘a’
- • p--; //p va avea s[3] pt p==s[4]
- • cout<<*p;//se va afisa ‘g’
- • Adunarea / scaderea unui intreg dintr-un pointer
- int n;
- char *p;
- p+n
- p-n //ambele furnizeaza ca rezultat adresa de memorie obtinuta prin adunarea sau scaderea a n*sizeof(tip) octeti
- ex: char s[]=”program, *p;
- p=&s[3];
- p=p+2;//p==&s[5]
- • Scaderea a 2 pointeri
- Vb de diferenta a doi pointeri in situatia in care ei contin adresele de memorie coresp. unor elemente ale unui vector
- • Ex: char s[]=”program”, *p, *q;
- • int i, j;
- • p=&s[i];
- • q=&s[j];
- • p-q==furnizeaza acelasi rezultat ca diferenta i-j
- • Numele unui vector are ca semnificatie adresa de inceput a zonei alocate elementelor acelui vector
- • char s[]=”program”, *p;
- • // s = p|r|o|g|r|a|m|\0
- • p=s; // I se aloca adresa de inceput a vectorului (‘p’ = prima litera din sir) //p=&s[0]
- • cout<<*p; // afiseaza doar ‘p’
- • p=&s[2];
- • cout<<*p; //o
- • Numele unui vector este un pointer constant, adica valoarea sa nu se poate modifica
- • Ex: char s[]=”program”, *p;
- • p=s;
- • p++;
- • cout<<*p; // s[1], adica r
- • cout<<*s; // afiseaza valoarea lui s[0], p
- • s++; //!!!!!!!!!!!!!! Nu se poate modifica :hecc:, op nu este permisa, nu pot sa modific var s fiind pointer constant
- • cout<<*(s+2);//s+2 repr adresa caracterului s[2] == ‘o’ adica &s[2]
- • cout<<s; //afis sirului programului
- • cout<<s+2; //afiseaza “ogram”
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement