6.2 Parametri transmiși prin valoare și parametri transmiși prin referință: Algoritmi în C++

6.2 Parametri transmiși prin valoare și parametri transmiși prin referință: Algoritmi în C++

În limbajul de programare C++, există două moduri principale de transmitere a parametrilor în funcții: prin valoare și prin referință. În această lecție, vom explora fiecare dintre aceste metode și vom înțelege cum pot fi utilizate în algoritmi.

1. Parametri transmiși prin valoare

Parametrii transmiși prin valoare sunt copii ale valorilor originale. Aceasta înseamnă că orice modificare făcută asupra parametrilor în interiorul funcției nu va afecta valorile originale din apelul funcției.

Pentru a utiliza parametrii transmiși prin valoare într-un algoritm în C++, trebuie să declarați funcția cu parametrii corespunzători și să le atribuiți valorile dorite în apelul funcției.

De exemplu, să presupunem că avem o funcție numită suma care primește doi parametri de tip întreg și returnează suma lor:


int suma(int a, int b) {
    return a + b;
}

Pentru a utiliza această funcție, putem apela:


int rezultat = suma(5, 3);

În acest caz, valorile 5 și 3 sunt transmise prin valoare către funcția suma. Funcția adaugă aceste două valori și returnează rezultatul, care este apoi atribuit variabilei rezultat.

2. Parametri transmiși prin referință

Parametrii transmiși prin referință sunt adresele de memorie ale valorilor originale. Acest lucru înseamnă că orice modificare făcută asupra parametrilor în interiorul funcției va afecta direct valorile originale din apelul funcției.

Pentru a utiliza parametrii transmiși prin referință într-un algoritm în C++, trebuie să declarați funcția cu parametrii corespunzători și să utilizați operatorul & înaintea numelui parametrului.

De exemplu, să presupunem că avem o funcție numită schimbaValoare care primește un parametru de tip întreg și îi schimbă valoarea:


void schimbaValoare(int &x) {
    x = 10;
}

Pentru a utiliza această funcție, putem apela:


int numar = 5;
schimbaValoare(numar);

În acest caz, valoarea variabilei numar este transmisă prin referință către funcția schimbaValoare. Funcția modifică valoarea lui numar în 10, deoarece lucrează direct cu adresa de memorie a variabilei.

Aplicarea parametrilor transmiși prin valoare și prin referință în algoritmi

Atât parametrii transmiși prin valoare, cât și cei transmiși prin referință pot fi utilizați în algoritmi pentru a manipula și modifica valorile într-un mod controlat.

De exemplu, să presupunem că avem un algoritm care sortează un vector de numere întregi în ordine crescătoare. Putem utiliza parametrii transmiși prin referință pentru a modifica direct valorile din vector, fără a crea copii suplimentare ale acestora.


void sortare(int &v, int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j  v[j+1]) {
                int temp = v[j];
                v[j] = v[j+1];
                v[j+1] = temp;
            }
        }
    }
}

Pentru a utiliza acest algoritm, putem apela:


int vector[] = {4, 2, 7, 1, 5};
int dimensiune = sizeof(vector) / sizeof(vector[0]);

sortare(vector, dimensiune);

În acest caz, valorile din vectorul vector sunt transmise prin referință către funcția sortare. Algoritmul sortează direct valorile din vector, fără a crea copii suplimentare ale acestora.

În concluzie, parametrii transmiși prin valoare și parametrii transmiși prin referință sunt două metode importante de transmitere a parametrilor în funcții în C++. Fiecare dintre aceste metode are avantajele și dezavantajele sale și poate fi utilizată în funcție de nevoile specifice ale algoritmului. Este important să înțelegem diferențele dintre cele două și să le aplicăm în mod corespunzător în dezvoltarea algoritmilor noștri.