InfoBook.ro ← Harta anului
Modul 04 · Pointeri
Modul 04 · Suport BAC C++ +

Fiecare variabilă are o adresă

Un pointer e un tip de date care manipulează adrese de memorie. Sună abstract? După lecția asta, vei ști exact unde „locuiește" fiecare variabilă — și vei înțelege de ce vectorii și șirurile se poartă așa cum se poartă.

🎯 Obiectiv 1Înțelegi ce e o adresă de memorie și de ce se scrie în baza 16.
🎯 Obiectiv 2Folosești operatorii & (adresa) și * (valoarea de la adresă) — accesare directă vs indirectă.
🎯 Obiectiv 3Descoperi că un vector E un pointer — pregătirea perfectă pentru șiruri.
1

Memoria RAM și „buletinul" unei variabile

RAM-ul e un șir uriaș de octeți numerotați: octetul 0, 1, 2, … La 1 GB de RAM, ultimul octet are numărul 2³⁰ − 1 = 1.073.741.823. Numărul unui octet = adresa lui.

Orice variabilă se caracterizează prin 4 lucruri

🪪 buletin de identitate — variabilă

numex
tip de dateunsigned int → 4 octeți
adresă de memorie0x61FE1C = 6.422.044
valoarea (acum)1234
Detaliu fin: tipul stabilește câți octeți ocupă variabila (deci și valorile minime/maxime — clasa a IX-a!), iar adresa este adresa primului octet din zona alocată. x „locuiește" la 0x61FE1C și ocupă 4 octeți consecutivi.
2

Adresele se scriu în baza 16

Cifrele: 0–9, apoi A=10, B=11, C=12, D=13, E=14, F=15. Regulile de conversie le știi din clasa a IX-a — doar baza s-a schimbat!

🔁 Convertor 10 → 16, pas cu pas — exemplul din lecție: 4.012.022

n =
Verificarea inversă (suma puterilor lui 16): 3D37F6₍₁₆₎ = 6·16⁰ + F·16¹ + 7·16² + 3·16³ + D·16⁴ + 3·16⁵ = 6 + 240 + 1792 + 12288 + 851968 + 3145728 = 4.012.022 ✓ În C++, adresele afișate încep cu prefixul 0x — de ex. 0x61FE1C.
3

Pointerul și operatorii lui: & și *

Declarare: int *px; — px poate memora adresa unei variabile de tip int. &x = adresa lui x (referențiere). *px = valoarea de la adresa din px (dereferențiere).

🧲 Simulator: accesare directă vs indirectă — exemplul din lecție

0x61FE1C
int x
?
px ⟶ ține adresa lui x
0x61FE10
int *px
?
 
Momentul-cheie al lecției: la pasul *px = 67890; valoarea lui x se schimbă printr-o instrucțiune în care numele x nu apare deloc! Asta e accesarea indirectă — și exact așa funcționează parametrii prin referință de la subprograme (clasa a IX-a).
4

Dezvăluirea: vectorul E un pointer

La int v[5], calculatorul rezervă 5 zone consecutive de câte 4 octeți. Te-ai întrebat vreodată ce afișează cout << v; ?

🧬 Memoria vectorului — adrese reale, consecutive

i =
apasă „cout << v" — răspunsul te va surprinde 👆
Concluzia care schimbă tot: v = adresa de început → v + i = adresa elementului i (sare i × 4 octeți) → *(v + i) este EXACT v[i]. Parantezele drepte sunt doar un „machiaj" peste aritmetica de pointeri!

De ce contează pentru șiruri (Modulul 05)

1char s[] = "abcdefgh";
2cout << s; // tot șirul — cout știe să afișeze char* până la '\0'
3cout << s + 2; // "cdefgh" — șirul care ÎNCEPE la poziția 2!
4strcpy(s + 2, s + 4); // copiez peste poziția 2 ce începe la 4
Acum are sens: funcțiile cstring primesc pointeri, strchr/strstr returnează pointeri (adică sufixe), iar „foarfeca" strcpy(s+i, s+j) e doar copiere între două adrese. Ești pregătit pentru șiruri!
5

Exerciții de fixare

Șase verificări rapide — dacă le iei pe toate, pointerii nu mai au secrete.

6

Fișa de sinteză

Pointerii, pe scurt.

Variabila are: nume, tip (câți octeți), adresă (primul octet) și valoare.
Adresele se scriu în baza 16 (cifre 0–9, A–F), cu prefixul 0x — conversia o știi din clasa a IX-a (bazele de numerație).
Declarare: int *px; — px memorează adresa unei variabile de tip int.
&x = adresa lui x · *px = valoarea de la adresa din px. Referențiere / dereferențiere.
Accesare indirectă: *px = 67890; schimbă x fără să-i pomenești numele — baza parametrilor prin referință (clasa a IX-a).
Vectorul e pointer: v = adresa de început, v+i = adresa elementului i, *(v+i) ≡ v[i].
Exercițiile din lecție (construirea vectorului în memorie, modificarea variabilelor prin pointeri) le facem la tablă — iar tot ce urmează în Modulul 05 se sprijină pe pagina asta.
← anteriorModul 03 · Mulțimi & set urmează →Modul 05 · Șiruri de caractere