Salt la conținutul principal
Modulul 3 · Lecția 2 din 28/18 în curs~12 min
Lecții din modul (2/2)

Treci prin valoare și referință

În C++, când treceți un argument unei funcții, există două moduri principale de a face acest lucru: prin valoare sau prin referință.

Înțelegerea acestei distincții este cheia atât pentru corectitudinea programului, cât și pentru optimizarea performanței.

Trecere după valoare (Copiere)

În mod implicit, C++ transmite argumente după valoare. Aceasta înseamnă că o copie a datelor este creată în memorie. Orice modificare făcută în interiorul funcției nu va afecta variabila originală din exterior:

C++
#include <iostream>

void increment(int n) {
    n++; // Modifies only the local copy
}

int main() {
    int x = 5;
    increment(x);
    std::cout << x << std::endl; // Prints 5, x remains unchanged!
    return 0;
}

Treci prin referință (&)

Dacă doriți ca funcția să poată modifica variabila originală sau dacă doriți să evitați copierea obiectelor mari (cum ar fi șiruri lungi sau vectori), trebuie să utilizați pass by reference.

O referință este declarată prin adăugarea simbolului & după tipul parametrului:

C++
#include <iostream>

void incrementRef(int& n) {
    n++; // Modifies the original variable directly
}

int main() {
    int x = 5;
    incrementRef(x);
    std::cout << x << std::endl; // Prints 6!
    return 0;
}

Parametrul int& n nu este o copie, ci un alias (o referință directă) la variabila x transmisă la apelarea funcției.

Încercați-l singur

Exercițiu#cpp.m3.l2.e1
Încercări: 0Se încarcă…

Definiți o funcție numită doubleNumber cu un tip de returnare void care ia o referință la un întreg n (folosind int& n) și își dublează valoarea (n = n * 2). Apelați-o în principal trecând variabila val inițializată la 10, apoi imprimați val.

Se încarcă editorul...
Afișează indiciu

Semnătura funcției folosește caracterul `&` după tip pentru a indica o referință:`void doubleNumber(int& n)`.

Soluție disponibilă după 3 încercări

Exercițiu#cpp.m3.l2.e2
Încercări: 0Se încarcă…

Definiți o funcție numită swap care preia două referințe întregi a și b (int& a, int& b) și schimbă valorile lor folosind o variabilă temporară temp. Apelați-l în principal pentru a schimba x și y, apoi imprimați-le.

Se încarcă editorul...
Afișează indiciu

Utilizați `int temp = a; a = b; b = temp;` pentru a schimba valorile.

Soluție disponibilă după 3 încercări