Sari la conținut
LECȚIA 10.2 · INFORMATICĂ

Transmiterea parametrilor: valoare vs referință

Diferența esențială dintre parametrii transmiși prin valoare și prin referință, cu exemple de urmărire.

Conținut verificat

Cele două moduri de transmitere

Prin VALOARE (implicit): funcția primește o COPIE; modificările din funcție NU afectează variabila originală.

Prin REFERINȚĂ (cu &): funcția lucrează direct pe variabila originală; modificările RĂMÂN după apel.

Exemplul care lămurește tot

Transmitere prin valoare si prin referinta
#include <iostream>
using namespace std;

void f(int x, int &y) {
    x = x + 10;
    y = y + 10;
}

int main() {
    int a = 1, b = 1;
    f(a, b);
    cout << a << " " << b;
    return 0;
}

Atenție: C++ foloseste ampersand, C foloseste pointeri, Pascal foloseste cuvantul var inaintea parametrului. Python transmite mereu referinta la obiect, dar numerele sunt imutabile, asa ca pentru a imita comportamentul s-a folosit o lista.

se trimit programului la citire

Afișează: 1 11. Explicație: x e copie a lui a (a rămâne 1), dar y e REFERINȚĂ la b (b devine 11).

Când folosești referința

  1. când funcția trebuie să MODIFICE argumentul (interschimbare, citire în funcție);
  2. când vrei să "returnezi" mai multe valori dintr-o funcție.

Interschimbarea clasică (swap):

Interschimbarea a doua valori
#include <iostream>
using namespace std;

void schimba(int &a, int &b) {
    int aux = a;
    a = b;
    b = aux;
}

int main() {
    int x = 3, y = 8;
    schimba(x, y);
    cout << x << " " << y;
    return 0;
}

Atenție: Fara referinta, functia ar schimba doar copiile si valorile din main ar ramane neschimbate.

se trimit programului la citire

Fără &, funcția ar interschimba doar copiile: variabilele reale ar rămâne neschimbate. E cea mai frecventă capcană de subiect II.

Urmărirea la BAC (subiectul II)

La "ce afișează programul", notează pentru FIECARE parametru: valoare (copie, moare la final) sau referință (alias, modifică originalul). Apoi urmărește doar referințele înapoi în main.

Greșeli frecvente

  1. Lipsa lui & la swap = funcție inutilă (schimbă copii).
  2. Referința cere o VARIABILĂ la apel: f(5) nu compilează dacă parametrul e int&.
  3. Nu confunda & din declarația parametrului (referință) cu & operatorul de adresă.