Pe variabilele de tip pointeri se pot aplica următoarele tipuri de operatori:
– operatori specifici
– operatorul de atribuire
– operatori aritmetici
– operatori relaţionali.
1. Operatorii specifici
Operatorii specifici variabilelor de tip pointer sunt:
Operatorul & – Operatorul de adresare
Se aplică pe o variabilă de memorie sau un element de tablou de memorie şi furnizează adresa variabilei de memorie, respectiv a elementului de tablou. Nu se poate aplica pe o expresie, o constantă sau o variabilă de tip registru (va fi definită ulterior). Rezultatul obţinut prin aplicarea acestui operator este de tip pointer. Operaţia se numeşte referenţierea unei variabile de memorie.
Operatorul * – Operatorul de redirectare
Se aplică pe o variabilă de tip pointer şi furnizează valoarea variabilei de memorie care se găseşte la adresa memorată în pointer. Rezultatul obţinut prin aplicarea acestui operator este de tipul datei asociate pointerului. Operaţia se numeşte dereferenţierea unui pointer.
2. Operatorul de atribuire
Folosind operatorul de atribuire = unei variabile de tip pointer i se poate atribui numai o valoare care reprezintă o adresă de memorie. Ea poate fi exprimată prin:
– O adresă de memorie care poate fi obţinută prin aplicarea operatorului de adresare pe o variabilă de memorie definită anterior, de acelaşi tip cu tipul de bază al pointerului, sau furnizată de numele unui tablou de memorie (care este o constantă simbolică de tip adresă). După operaţia de atribuire, variabilă de tip pointer va adresa zona de memorie în care este stocată variabilă de memorie, respectiv primul element al tabloului (elementului 0).
– O altă variabilă de tip pointer care se referă la acelaşi tip de bază. După operaţia de atribuire, cele două variabile de tip pointer vor adresa aceeaşi zonă de memorie.
– Rezultatul unei expresii construite cu operanzi de tip adresă a unor date definite anterior şi care aparţin tipului de bază al pointerului.
– Constanta 0 sau constanta predefinită NULL. Poate fi atribuită oricărui tip de pointer. Unui pointer nu i se poate atribui valoarea unei alte constante întregi, chiar dacă în variabila de tip pointer se memorează un număr întreg. Acest număr întreg are o semnificaţie specială, iar C++ face diferenţa între semnificaţia celor două valori: adresă sau număr întreg.
3. Operatorii aritmetici
Operaţiile aritmetice permise asupra pointerilor sunt:
– Adunarea şi scăderea unei constante – operatorii + şi –
– Incrementarea şi decrementarea unui pointer – operatorii ++ şi –
– Scăderea a doi pointeri de acelaşi tip – operatorul –
Operatorul pentru adunarea sau scăderea unei constante este
p+k sau p-k
unde p este un pointer cu tip care memorează o adresă adr, iar k este o constantă.
Operatorul pentru incrementarea şi decrementarea unui pointer este
p++ sau p–
unde p este un pointer cu tip care memorează o adresă adr.
Operatorul pentru scăderea a doi pointeri este
p-q
unde p şi q sunt doi pointeri către acelaşi tip de bază, care indică elementele aceluiaşi tablou de memorie, adresa memorată de p fiind mai mare decât cea memorată de q (p indică un element de tablou situat în memorie după elementul indicat de pointerul q).
4. Operatorii relaţionali
Operatorii relaţionali care pot fi aplicaţi asupra pointerilor sunt:
– Operatorii de inegalitate: <, >, <= şi >=
– Operatorii de egalitate: == şi !=
Observaţii:
1. Asupra pointerului fără tip nu se pot aplica operatori relaţionali.
2. Asupra pointerului zero nu se pot aplica operatori relaţionali.