Răspuns :
Buna !
Acel ampersand semnifica faptul ca variabilele n si m se transmit prin referinta.
[+] Moduri de transmitere a variabilelor in C++
In C++ avem cateva moduri de transmitere a parametrilor unei functii :
- transmitere prin referinta
- transmitere prin valoare
- transmitere ca pointer
Momentan ne intereseaza doar primele doua. Transmiterea prin pointer este ceva mai complex de explicat si nu reprezinta obiectivul acestei intrebari.
[1] Transmiterea prin valoare :
Cand transmitem prin valoare NU se modifica valoarea initiala a variabilelor atunci cand apelam functia; functia lucreaza practic cu o copie a variabilelor transmise.
Exemplu :
#include <iostream>
using namespace std
void incrementare_afisare(int x){
x=x+1;
cout << x << endl;
}
int main(){
int x=5;
incrementare_afisare(x);
cout << x
}
Se va afisa pe consola :
6
5
Explicatie :
Initializam variabila x cu 5. Apelam functia incrementare_afisare in care parametrul x e transmis prin valoare. Se face in stiva de executie o copie a variabilei x care are valoarea 5. Aceasta copie se incrementeaza cu 1, deci devine 6. Se afisaza valoarea 6. Se iese din functie iar copia variabilei x originale folosite in functie se sterge. Aceste operatii nu a afectat variabila x originala, aceasta are in continuare valaorea 5. Din acest motiv se afiseaza 5.
[2] Transmiterea prin referinta :
Cand transmitem prin referinta se modifica valoarea initiala a variabilelor atunci cand apelam functia; functia lucreaza direct cu variabila originala. Pentru a transmite o variabila prin referinta punem ampersand in fata acesteia in antetul functiei.
#include <iostream>
using namespace std
void incrementare_afisare(int &x){
x=x+1;
cout << x << endl;
}
int main(){
int x=5;
incrementare_afisare(x);
cout << x
}
Se va afisa pe consola :
6
6
Explicatie :
Initializam variabila x cu 5. Apelam functia incrementare_afisare in care parametrul x e transmis prin referinta. Functia lucreaza direct cu variabila x originala. Aceasta se incrementeaza cu 1, deci devine 6. Se afisaza valoarea 6. Se iese din functie. Pentru ca am transmis variabila prin referinta, aceasta a fost modificata de functie si are valoarea 6. Din acest motiv se afiseaza 6.
[+] De ce folosim transmitere prin referinta in functia din imagine ?
Transmitem variabilele n si m prin referinta pentru ca avem nevoie ca acestea sa fie modificate de functie. In functie are loc citirea acestora dar avem nevoie de aceste valori si inafara functiei. Din acest motiv avem nevoie ca acestea sa fie transmise prin referinta.
De retinut este ca nu e nevoie sa transmitem vectorii si matricele prin referinta pentru a putea modifica valorile acestora. In functia data matricea e transmisa fara ampersand dar totusi putem salva valorile citite dupa iesirea din functie. Acest lucru se datoreaza faptului ca tablourile sunt pointeri.
[+] Exista alte cazuri in care dorim sa transmitem variabilele prin referinta ?
Da. Am discutat faptul ca la transmiterea prin valoare se face o copie a variabilei transmise. Aceasta copie ocupa spatiu suplimentar in memorie (mai ales in cazul tipurilor de date complexe). In cazul in care dorim sa reducem din spatiul ocupat in memoria RAM la executia programului putem transmite variabilele prin referinta.
Răspuns:
"&" reprezinta adresa de memorie a variabilei
In general ei sunt folositi daca vrei sa pasezi adresa de memorie unei functii in loc de valoare
EX:
void functie(int a) {
a = a + 1;
}
Daca apelam functia, "functie(c);" a primeste valoare 'c', insa 'c' nu isi modifica valoarea, variabile 'a' doar copiaza valoarea lui 'c'. 'c' ramane neschimbat
void functie(int &a) {
a = a + 1;
}
In cazul acesta 'a' reprezinta adresa de memorie, si daca apelam functia "functie(c)", 'c' isi schimba valoarea, deoarece functia incrementeaza +1
Daca mai ai alte intrebari sa imi zici
Explicație: