Intanto indenta il codice decentemente, aiuta un sacco. Poi, la parola chiave "reference" non esiste, i reference in C++ si indicano con la &
codice:
{
    int x = 1;
    int y = 1;
    void pippo(int & z)
    {
        z = x + y + z;
    }
    {
        int y = 3;
        {
            int x = 3;
        }
        pippo(y);
        write(y);
    }
    write(y);
}
Poi, la regola di base è facilissima: la variabile che viene presa in considerazione (se ce n'è più di una con lo stesso nome) è quella dichiarata nel blocco più interno (ma non più interno del blocco in cui ci si trova)
codice:
{
    int x = 1;
    int y = 1;
    void pippo(int & z)
    {
        // gli x e y a cui ci si riferisce qui sono quelli che valgono 1
        z = x + y + z;
    }
    {
        int y = 3;
        {
            // questa variabile muore alla chiusura della graffa, quindi ai nostri fini non ci interessa
            int x = 3;
        }
        pippo(y); // a pippo viene passato un riferimento a y=3
        // y ora vale 1 + 1 + 3 = 5 (=> pippo)
        write(y); // viene stampato 5
    }
    write(y); // l'y a cui ci si riferisce ora è quella che vale 1
}