
//
// To jest przykładowy kod z podrozdziału 8.5.5 „Przekazywanie przez referencję” książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

int g(int& x);
int f(int& x);

void h(int x, int y)
{
    int i = 7; 
    int& r = i;    // r jest referencją do i.
    r = 9;         // i otrzymuje wartość 9.
    i = 10;
    cout << r << ' ' << i << '\n'; // Drukuje: 10 10.

    vector< vector<double> > v;    // Wektor wektorów liczb typu double.

    double val = v[f(x)][g(y)];    // val jest wartością wyrażenia v[f(x)][g(y)].
    double& var = v[f(x)][g(y)];   // var jest referencją do v[f(x)][g(y)].

    var = var/2+sqrt(var);
}

//------------------------------------------------------------------------------

// Przekazywanie przez referencję (funkcja odwołuje się do przekazanej jej zmiennej).
int f(int& x)
{
    x = x+1;
    return x;
}

//------------------------------------------------------------------------------

int main()
{
    int xx = 0;
    cout << f(xx) << endl;         // Drukuje: 1.
    cout << xx << endl;            // Drukuje: 1; funkcja f() zmieniła wartość xx.

    int yy = 7;
    cout << f(yy) << endl;         // Drukuje: 8.
    cout << yy << endl;            // Drukuje: 8; funkcja f() zmieniła wartość yy.
}

//------------------------------------------------------------------------------

int g(int& x)
{
    x = x+1;
    return x;
}

//------------------------------------------------------------------------------
