Documente Academic
Documente Profesional
Documente Cultură
Pana acum, variabilele au fost utilizate doar prin identificatori, programul neavand nevoie
de adresa in care era memorata variabila.
Pentru un program C++, memoria unui calculator e asemanatoare unei succesiuni PRECISE
de celule, fiecare celula aflandu-se la o anumita adresa, UNICA (scrisa in baza 16).
Atunci cand declaram o variabila se aloca AUTOMAT si zona de memorie. Este important sa
cunoastem ADRESA zonei de memorie in care se va pastra VALOAREA variabilei.
Definitie: Variabila ce memoreaza adesa altei variabile se numeste pointer.
DECLARAREA UNUI POINTER DE DATE
tip * variabila_pointer ;
Unde tip reprezinta tipul de baza al pointerului, care indica tipul datelor memorate la adresa
continuta in variabila_pointer.
Exemple
1a)int *p1;
//p1 este un pointer cu tipul de baza int, deci va contine adresa unei zone de memorie la
care este memorat un numar intreg
b) char *s;
//s este un pointer cu tipul de baza char, deci va contine adresa unei zone de memorie la
care este memorat un caracter
&variabila
Exemplu:
P1 = &a;
//adresa variabilei a se asociaza variabilei p1
O proprietate importanta a pointerilor este aceea ca pot fi utilizati pentru a accesa direct
valoarea variabilei catre care ei fac referinta. Acest lucru se poate realiza prin scrierea in
fata numelui pointerului a operatorului de derefențiere (*).
*variabila_pointer
Exemplu:
Observatie:
Simbolul * folosit la declararea pointerilor, nu trebuie confundat cu operatorul de
derefentiere. Putem spune ca sunt doua lucruri diferite, reprezentate de acelasi
simbol.
2)
#include <iostream>
Using namespace std;
int main ()
{
Int a = 5, b = 15;
int * p1, * p2;
p1 = &a; // p1=adresa pt a
p2 = &b; // p2 =adresa pt b
*p1 = 10; // valoarea adresata de p1 = 10 a este 10
*p2 = *p1; // valoarea adresata de p2 = 15 b este 20
p1 = p2; // se copiaza in p1 adresa din p2
*p1 = 20; // se modifica valoarea retinuta in p1
cout<< "firstvalue is " <<firstvalue<< endl;
cout<< "secondvalue is " <<secondvalue<< endl;
return 0;
}
Observatii:
Declararea int * p1,*p2; este diferita de declararea int *p1, p2;
Indicarea tipului de baza e esentiala. Adresa unei zone de memorie este
de fapt adresa primului octet din zona respective. Dimensiunea zonei de
memorie a carei adresa este memorata in pointer difera de la un tip la
altul: un octet pentru char *, 2 octeti pentru int, 4 octeti pt long, etc.
Exista o constanta pointer speciala numita “NULL”. Semnificatia acesteia
este “pointerul nu contine adresa niciunei zone de memorie”. Valoarea
acestei constante este 0.
int *r = NULL;
OPERATII CU POINTERI
INCREMENTARE/DECREMENTARE
Asupra unui pointer se pot aplica operatorul ++ si operatorul de decrementare - -.
Ca efect, se mareste/micsoreaza adresa memorata in pointer cu numarul de octeti necesari
pentru a memora o data de tipul de baza al pointerului.
Exemplu
char *p1, c;
int *p2, n;
cin>>n>>c;
p1=&c; p2=&n;
cout<<p1<<” ”<<p2;
p1++;p2++;
cout<<p1<<” ”<<p2;
COMPARATII se pot realiza numai daca au acelasi tip de baza cu ajutorul operatorilor
relationali
Exemplu: if (p!=NULL)….