Appearance
Pointeri
(din eng. “to point” ⇔ “a arăta cu degetul”)
Obs: Fiecare variabila are în memorie o adresă.
Obținerea adresei unei variabile se numește referențiere.
Obținerea valorii de la o adresa (pointer) se numește dereferențiere.
Pe scurt :
- iau valoarea (dereferentiere)
& - iau adresa (referentiere)
Operatorul de referențiere - &
Sintaxă: &variabila
Efect: se obține adresa acelei variabile
Ex:
Def: Pointerul este o variabilă în care memorez o adresă.
Cum declar un pointer ?
Sintaxă:
cpp
Cum se citește : Dacă declar de ex, “int* p”, vom spune că p este “int pointer” SAU p este “pointer la int”. În documentații/materiale de specialitate/etc., se spune că p este de tip “int*”Obs: Pt int *a, b, c; se declara a (un int pointer), b (un int), c (un int). Dacă vreau ca și a, și b, și c sa fie int pointer trebuie sa scriu int *a, *b, *c.
Ex:
Ex2:
Obs:
cpp
cout<<v<<" "<<&v[0]<<" "<<v+0; // se afișează 3 adrese identice // sunt notații echivalenteOperatorul de dereferențiere - *
Sintaxa: *pointer
Efect: Se obține zona de memorie de la adresa pointerului.
cpp
Ex: v[0] = 3; cout<<*v; // Se afișează 3;
Ex 2: int *p = &x; cout<<*p; // Se afișează valoarea din xOperații cu pointeri
Pot face:
pointer + număr
pointer - număr
NU pointer + pointer
NU pointer * numar
NU pointer / numar
NU pointer % numar
e OK numar + pointer (dar neobisnuit)
Obs: v[i] ⇔ *(v+i) ⇔ *(i+v) ⇔ i[v]
Obs: Un pointer care este declarat global este inițializat cu valoarea NULL (adresa 0x0). Niciodată sistemul de operare nu va aloca memorie la acea adresă.
cpp
Cum initializez un pointer cu NULL ?Ex:
Obs: După cum se poate observa și în exemplu, NULL si nullptr sunt aliasuri pentru 0 (adresa 0).