8.4.3. Compararea a doi pointeri

2019/03/08 in Programare in C

Doi pointeri care pointeaza spre elementele aceluiasi tablou pot fi comparati folosind operatorii de relatie si de egalitate.

Astfel, daca p pointeaza spre elementul t[i] al tabloului t (adica are ca valoare adresa elementului t[i] si q spre elementul t[j] al aceluiasi tablou), atunci expresiile p < q, p > q, p <= q, p >= q, p == q, p != q sunt legale. De exemplu, expresia:

p < q

are valoarea adevarat (1), daca i < j si fals (0) in caz contrar.

In mod analog se evalueaza si celelalte expresii de mai sus.

Operatorii de egalitate (== si !=) pot fi folositi pentru a compara pointerii cu o constanta speciala NULL. Aceasta este definita in fisierul stdio.h astfel:

#define NULL 0

Ea reprezinta asa-numitul pointer nul.

Daca p este un pointer spre orice tip, atunci se pot face comparatii de forma:

p == NULL

si

p != NULL

In limbajul C++ se recomanda sa nu se utilizeze constanta NULL, ci chiar valoarea ei zero:

p == 0

si

p != 0

sau echivalentele lor:

!p

si

p

Intr-adevar, p == 0 are valoarea adevarat atunci si numai atunci cand !p are valoarea adevarat.

Acelasi lucru se poate spune si despre celelalte doua expresii:

p != 0

are valoarea fals atunci si numai atunci cand p are valoarea zero, adica atunci cand p este fals.

In general, daca un pointer are valoarea 0 (pointerul nul), inseamna ca el nu defineste o adresa. Asa cum se va vedea mai tarziu, astfel de teste sunt uneori necesare pentru a pune in evidenta anumite erori.

Tinand seama de faptul ca NULL nu se mai utilizeaza in programarea curenta in limbajul C++, nu o vom mai utiliza nici la scrierea programelor in C. Pana in prezent, am utilizat constanta NULL la apelul functiei gets. Aceasta returneaza pointerul spre zona de memorie in care se pastreaza sirul de caractere citit. Deoarece la intalnirea sfarsitului de fisier, continutul acestei zone nu este definit, functia gets returneaza zero in acest caz.

8.4.4. Diferenta a doi pointeri