CATEGORII DOCUMENTE |
Asupra pointerilor se pot face diferite operatii. Deoarece ei contin adrese atunci operatiile se realizeaza cu adrese.
Operatorii de incrementare si decrementare se pot aplica variabilelor de tip pointer.
Efectul:
operatorul de incrementare aplicat asupra unui operand de tip pointer spre tipul tip mareste adresa continuta de operand cu numarul de octeti necesari pentru a pastra o data de tipul tip
operatorul de decrementare se executa in mod analog, cu singura diferenta ca in loc sa se mareasca adresa, ea se micsoreaza cu numarul corespunzator de octeti.
De obicei decrementarile si incrementarile adreselor sunt mai rapide ca executie cand se au in vedere prelucrari de tablouri.
Exemplu:
int tab[10];
int *p;
int i=0;
p=&tab[i];
p++; // p contine adresa lui tab[1]
// cu p se pot face referiri la orice element de tablou
Daca p este un pointer, sunt corecte expresiile de forma:
p+n si p-n
unde n este de tip intreg.
Efectul:
expresia p+n mareste valoarea lui p cu n*nr_tip, unde nr_tip este numarul de octeti necesari pentru a memora o data de tipul tip spre care pointeaza p;
analog expresia p-n micsoreaza valoarea lui p cu n*nr_tip.
Daca x este un tablou de tipul tip, atunci x este pointer, deci o expresie de forma:
x+n;
este corecta si deoarece x este un pointer spre primul sau element x[0], x+n va fi un pointer spre elementul x[n]. Rezulta ca valoarea elementului x[n] se poate reprezenta prin expresia:
*(x+n);
Astfel variabilele cu indici se pot inlocui prin expresii cu pointeri. Aceasta permite ca la tratarea tablourilor sa se foloseasca expresii cu pointeri in locul variabilelor cu indici. Versiunile cu pointeri sunt de obicei optime in raport cu cele realizate prin intermediul indicilor.
Doi pointeri care pointeaza spre elementele aceluiasi tablou pot fi comparati folosind operatorii de relatie si de egalitate. Astfel, daca p si q sunt doi pointeri care pointeaza spre elementele tab[i], respectiv tab[j] ale tabloului tab, expresiile urmatoare au sens:
p<q p!=j p= =q.
Observatii:
1o. Pointerii nu pot fi comparati decat in conditiile amintite mai sus (deci daca sunt pointeri spre elementele aceluiasi tablou).
2o. Operatorii = = si != permit compararea unui pointer si cu o constanta simbolica speciala avand numele NULL. Aceste comparatii permit sa stabilim daca un pointer contine o adresa sau nu. Astfel, daca expresia:
p= = NULL
este adevarata, p nu contine o adresa. Daca expresia respectiva are valoarea fals atunci p contine o adresa. Constanta simbolica NULL este definita in fisierul stdio.h
Doi pointeri care pointeaza spre elementele aceluiasi tablou pot fi scazuti. Rezultatul diferentei a doi pointeri este definit astfel: fie t un tablou de un tip oarecare si p si q doi pointeri, p contine adresa elementului t[i] iar q contine adresa elementului t[i+n]. Atunci diferenta q-p are valoarea n.
Vom da cateva functii asupra sirurilor de caractere:
functia lungime
unsigned lungime (char*x)
functia copiaza
void copiaza(char *x, char *y) // copiaza din zona de adresa y
// in zona de adresa x
functia concateneaza
void concateneaza (char *x, char *y)
// concateneaza sirul de adresa y la sfarsitul sirului
// de adresa x
functia compara
int compara (char *x, char *y)
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 852
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved