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.