POINTERI IN CPP
Variabilele sunt zone de memorie dedicate pentru a stoca diferite valori, de diferite tipuri.
Lungimea de memorie alocată pentru a stoca o valoare depinde de tipul acestei valori.
Această lungime este decisă în momentul declarării variabilei.
De exemplu, declaraţia “int nr;” alocă în memorie un spaţiu de 4 Bytes (4 octeţi).
Locul din memorie (adresa de memorie) în care este stocată variabila nr este decisă de către compilator, în zona Stack (variabile statice).
În cazul declaraţiei nr = new int; compilatorul alocă spaţiu în memoria HEAP (variabile dinamice).
Să urmărim, ca prim exemplu, declaraţia int nr;
Să presupunem, în mod fictiv, că adresa decisă de către compilator pentru stocarea variabilei nr este 507.
Prin atribuirea unei valori variabilei nr, la adresa de memorie 507 este stocată această valoare.
De exemplu, atribuirea nr = 12; are ca effect “scrierea” la adresa 507 a valorii 12 (vezi schema de mai jos).
Putem accesa această valoare, de exemplu, prin instrucţiunea de tipărire
cout << “nr = “ << nr;
care va avea ca efect tipărirea nr = 12.
Deşi nu putem hotărî la ce adresă a fost pusă variabila nr, putem să cerem să se afişeze această adresă.
Reamintim că adresa unei variabile nr se notează cu &nr.
Atunci, instrucţiunea
cout << &nr;
va avea ca efect tipărirea acestei adrese, adică adresa 507.
Aşa cum ştim însă, adresa se va tipări în hexagesimal, adică 0x0001fb.
(50710 = 0x0001fb16)
Putem stoca această valoare într-o variabilă de tip POINTER.
O variabilă de tip POINTER este dedicată pentru a reţine ADRESE.
O variabilă de tip POINTER se declară după sintaxa
tipVariabilă *numePointer;
Numele pointerului îl alegem noi, ca la orice variabilă.
De exemplu, în cazul nostrum, am putea declara
int *ptr;
(am declarat pointerul cu numele ptr, care ţine adrese ale unor variabile de tip int.
Am putea scrie atunci
ptr = &nr;
(am atribuit pointerului ptr adresa variabilei nr, de tip întreg)
Instrucţiunea
cout << ptr;
are atunci acelaş efect ca instrucţiunea cout << &nr;
adică se va tipări, 0x0001fb (507 în zecimal).
Pentru a accesa VALOAREA care se reţine la adresa către care “ARATĂ” pointerul ptr, vom folosi notaţia *ptr.
Atunci instrucţiunea cout << *ptr, va avea acelaş efect ca instrucţiunea cout << nr, adica se va tipări valoarea 12.
Modificarea valorii variabilei nr se poate face fie prin instrucţiunea nr = 53; fie prin instrucţiunea *ptr = 27; Vezi schema!

PROGRAM POINTERI ŞI ADRESE


ARITMETICA POINTERILOR – ADUNAREA CU UN NR ÎNTREG
INCREMENTARE



PROGRAM SCĂDEREA A DOI POITERI


PROGRAM POINTERI NULI


PROGRAM POINTERI - VECTORI


PROGRAM POINTERI LA FUNCŢII - INTRODUCERE


PROGRAM POINTERI ÎN HEAP - INTRODUCERE


PROGRAM POINTERI MALLOC


PROGRAM POINTERI - STRUCTURI ŞI LISTE ÎN HEAP



PROGRAM POINTERI LA POINTERI (VECTORI DE POINTERI)




PROGRAM POINTERI LA POINTERI
(TABEL/MATRICE CA VECTORI DE VECTORI)





