8.4.2. Adunarea si scaderea unui intreg dintr-un pointer

2019/03/07 in Programare in C

Daca p este un pointer spre tipul t si n un intreg, atunci se pot utiliza expresiile:

p + n

si

p - n

Expresia p + n are ca valoare valoarea lui p marita cu produsul r*n, unde prin r am notat numarul de octeti necesari pentru a pastra in memorie o data de tipul t.

In mod analog, valoarea expresiei p - n este valoarea lui p micsorata cu produsul r*n.

Fie tab un tablou unidimensional de tip t. Atunci tab este un pointer (constant) si deci o expresie de forma:

tab + n

este corecta. Conform celor de mai sus, rezulta ca aceasta expresie este chiar adresa elementului tab[n]. Intr-adevar, tab este adresa lui lui tab[0]. Atunci tab + 1 are ca valoare adresa initiala a lui tab[0] marita cu r, r fiind numarul de octeti alocati pentru o data de tip t, adica numarul de octeti ocupat de elemntrul tab[0].

Deci tab + 1 are ca valoare adresa elemntului tab[1].

In general, tab + n va avea ca valoare adresa elementului tab[n].


Deoarece tab+n este adresa elementului tab[n], rezulta ca *(tab+n) are chiar valoarea elementului tab[n]. Deci, o atribuire de forma:

x = tab[n]

este echivalenta cu:

x = *(tab+n)

In general, variabilele cu indici se pot inlocui prin expresii cu pointeri. Astfel de inlocuiri conduc la optimizari, inlocuindu-se operatiile de inmultire care intervin la evaluarea variabilelor cu indici prin adunari. De aceea, se recomanda utilizarea expresiilor cu pointeri in locul variabilelor cu indici.

8.4.3. Compararea a doi pointeri