Referencja przy wywołaniu funcji

0

Witam. Próbuje sobie przeanalizować poniższy kod. Wiem jak działa referencja, ale kiedy analizuje wywołanie drugiej funkcji do często wychodzą mi sprzeczne z wyniki z moją analizą. Mógłby mi ktoś powiedzieć co dokładnie jest wykonywane przy wywoływaniu drugiej funkcji?

#include<iostream>
using namespace std;
int f6(int a, int &b)
{
    a++;
    b%=a;
    return b++;
}
int main()
{
    int a=2, b=6;
    int c;
    c=f6(a,b);
    cout<<a<<" "<<b<<" "<<c<<endl;
    c=f6(b,a);
    cout<<a<<" "<<b<<" "<<c<<endl;
}
 
0

Znowu? Przecież już dostałaś odpowiedzi na to pytanie.

0

Pierwsze wywołanie:
f6(a = 2, &b = 6)
a++ -> 2++ -> a = 3
b = b%a; -> b = 6%3 -> b = 0
return b++ -> zwraca b = 0 (twoje c) ale go zwiększa tak, że po wyjściu b = 1
Po wyjściu z funkcji twoje a = 2, b = 1 (przekazane przez referencję), c = 0

Drugie wywołanie:
teraz a = 2, b = 1
f6(a = 1, &b = 2)
a++ -> 1++ -> a = 2
b = b%a; -> b = 2%2 -> b = 0
return b++ -> zwraca b = 0 (twoje c) ale go zwiększa tak, że po wyjściu b = 1
Po wyjściu z funkcji twoje a = 1 (w funkcji nazywało się 'b' - przekazane przez referencję), b = 1 (przekazane przez wartość, więc ma wartość jak przed wywołaniem), c = 0

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.