Informatică, întrebare adresată de daniel22, 9 ani în urmă

void f(int &a,int b)
{
a=a-5;b=a-2;
cout<<a<<b;  }
a=3;b=9; ce se afiseaza in urma executarii secventei: f(b,a); f(b,b) .

Răspunsuri la întrebare

Răspuns de Ariana98
1
În caz de f(b,a) și f(b,b) privește screenshot-ul

Anexe:

Ariana98: Asta nu știu((
MihaiChirculete: iti afiseaza -1 deoarece 4-5 da -1. Se intampla acest lucru deoarece parametrul a din functia f este transmis prin referinta. Atunci cand un parametru este transmis prin referinta, valoarea sa va ramane modificata la incheierea functiei spre deosebire de parametrul b care este transmis prin valoare si odata cu incheierea functiei se va reveni la valoarea initiala.
MihaiChirculete: astfel o sa ai ceva de genul: a=3 si b=9; dupa ce apelezi f(b, a) o sa ai b=9-5 adica 4 si a=3; dupa ce apelezi f(b, b) o sa ai b=4-5 adica -1
daniel22: de ce e 4-5 si nu 9-5?
daniel22: daca pun in loc de f(b,b), f(a,b) va face 3-5 adica a-ul initial nu cel transmis prin referinta dupa f(b,a)
MihaiChirculete: deci daca ai o functie care primeste un parametru prin referinta (adica are & in fata) acea variabila daca se modifica in functie va ramane modificata si in afara functiei. tu cum ai &a, orice modificare adusa lui a va fi pastrata si in afara functiei
MihaiChirculete: daca pui f(a, b) se va face 3-5 cum ai zis. dar dupa ce se va incheia functia a-ul tau va ramane cu -2 in el si in main
daniel22: stiu ce face & , dar dupa apelul f(b,a) o sa am a=4 si b=9 da? cand fac f(b,b) de ce nu face a=9-5 si face a=4-5?
daniel22: daca as lua o varibila c=6 sa zicem si as da f(c,b) nu imi face a=4-5 ci face a=6-5
daniel22: gata , m-am prins
Alte întrebări interesante