De ce contează?
Imaginează-ți un sertar cu etichetă pe care scrii cu creionul. Eticheta (numele) rămâne fixă, dar conținutul îl poți șterge și rescrie oricând. O variabilă e exact asta: un sertar cu nume, în care ții o valoare pe care o poți schimba pe parcurs.
Ce este o variabilă
O variabilă este un loc în memorie cu un nume și un tip, în care păstrezi o valoare. Trei operații apar mereu:
- Declarare — anunți tipul și numele:
int varsta; - Inițializare — îi dai prima valoare:
int varsta = 14; - Atribuire — îi schimbi valoarea mai târziu:
varsta = 15;
Declararea rezervă sertarul, dar nu îl golește. Dacă citești valoarea înainte să atribui ceva, primești ce „gunoi" era deja acolo. De aceea inițializarea contează.
Algoritm pas cu pas: ce se întâmplă în memorie
Urmărim secvența:
int a = 3; // sertarul a tine 3
int b = a; // se COPIAZA valoarea: b tine 3
a = 10; // a devine 10; b ramane 3| Pas | a | b |
|---|---|---|
int a = 3; | 3 | — |
int b = a; | 3 | 3 |
a = 10; | 10 | 3 |
Cheia: b = a copiază valoarea, nu leagă cele două sertare. Sunt independente.
Schimbul a două variabile
O operație care apare des — interschimbarea valorilor. Cu o variabilă temporară:
#include <iostream>
using namespace std;
int main() {
int x = 7, y = 2;
int temp = x; // salvam pe x ca sa nu il pierdem
x = y; // x devine 2
y = temp; // y devine 7
cout << x << " " << y << "\n"; // 2 7
return 0;
}Fără temp, dacă faci direct x = y; y = x;, pierzi valoarea veche a lui x: după
primul rând x și y sunt amândouă 2. Variabila temporară salvează valoarea înainte
să o suprascrii. (În C++ ai și funcția swap(x, y) care face exact asta.)
Reguli pentru nume
- Încep cu literă sau
_, conțin litere, cifre și_. Fără spații, fără diacritice. - Sunt case-sensitive:
sumașiSumasunt două variabile diferite. - Alege nume clare și scurte:
suma,nrElemente,st,dr. Numele bun e jumătate din documentație.
Complexitate
Declararea și atribuirea sunt operații O(1) — cost constant, indiferent de valoare. Nu te costă nimic în plus să folosești variabile bine numite.
Greșeli frecvente cu variabile:
- Folosire fără inițializare:
int s; for(...) s += a[i];—spornește de la gunoi, nu de la 0. Scrieint s = 0;. - Redeclarare în buclă: pui
int maxim = a[0];în interiorul buclei → se resetează la fiecare pas și pierzi maximul găsit. Declar-o înainte de buclă. - Confuzie de domeniu (scope): o variabilă declarată în
{ }nu există în afara acelor acolade. - Suprascriere prematură: la swap fără
temp, suprascrii valoarea înainte s-o salvezi.
De reținut
- O variabilă = sertar cu nume și tip; declar-o, inițializeaz-o, apoi o poți reatribui.
b = acopiază valoarea — sertarele rămân independente.- Variabilele neinițializate conțin gunoi; inițializează mereu înainte de citire.