Documente Academic
Documente Profesional
Documente Cultură
Asupra pointerilor se pot face diferite operaţii. Deoarece ei conţin adrese atunci operaţiile
se realizează cu adrese.
Incrementare şi decrementare
Operatorii de incrementare şi decrementare se pot aplica variabilelor de tip pointer.
Efectul:
operatorul de incrementare aplicat asupra unui operand de tip pointer spre tipul tip măreşte
adresa conţinută de operand cu numărul de octeţi necesari pentru a păstra o dată de tipul tip.
Exemplu:
int tab[10];
int *p;
int i=0;
p=&tab[i];
p+n şi p-n
expresia p+n măreşte valoarea lui p cu n*nr_tip, unde nr_tip este numărul de octeţi necesari
pentru a memora o dată de tipul tip spre care pointează p;
Dacă x este un tablou de tipul tip, atunci x este pointer, deci o expresie de forma:
x+n;
este corectă şi deoarece x este un pointer spre primul său element x[0], x+n va fi un pointer
spre elementul x[n]. Rezultă că valoarea elementului x[n] se poate reprezenta prin expresia:
*(x+n);
Astfel variabilele cu indici se pot înlocui prin expresii cu pointeri. Aceasta permite ca la
tratarea tablourilor să se folosească expresii cu pointeri în locul variabilelor cu indici.
Versiunile cu pointeri sunt de obicei optime în raport cu cele realizate prin intermediul
indicilor.
Observaţii:
1o. Pointerii nu pot fi comparaţi decât în condiţiile amintite mai sus (deci dacă sunt pointeri
spre elementele aceluiaşi tablou).
p= = NULL
este adevărată, p nu conţine o adresă. Dacă expresia respectivă are valoarea fals atunci p
conţine o adresă. Constanta simbolică NULL este definită în fişierul stdio.h
Diferenţa a doi pointeri
Doi pointeri care pointează spre elementele aceluiaşi tablou pot fi scăzuţi. Rezultatul
diferenţei a doi pointeri este definit astfel: fie t un tablou de un tip oarecare şi p şi q doi
pointeri, p conţine adresa elementului t[i] iar q conţine adresa elementului t[i+n]. Atunci
diferenţa q-p are valoarea n.
Exemple
funcţia lungime
{ int i;
for (i=0; *x != ‘\0’; i++) x++; // sau for (i=0; *x++; i++);
return i;
funcţia copiază
// in zona de adresa x
{ while(*x++ = = *y++); }
funcţia concateneaza
// de adresa x
funcţia compara
x++;
y++;