Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Corso di Programmazione I
Le funzioni
// versione B
void incr(int *v, int dx) {
*v += dx;
}
float x=0.;
incr(&x); // viene invocata
// la versione C
incr();
e
Riferimenti
00010100
00011100
00010101
01010100
int i=3,x=5;
// due variabili intere i e x
int & j=i;
// j un riferimento ad i
int & q=x;
// q un riferimento ad x
const int & y=x; // y un riferimento ad x, x non pu essere modificata
attraverso y
cout << "x: " << x << " i: " << i << endl;
cout << "q: " << q << " j: " << j << endl;
j=10;
q=-2;
cout << "x: " << x << " i: " << i << endl;
cout << "q: " << q << " j: " << j << endl;
//j=x; //errore! non posso "spostare" j su x
//y=5; //errore! non posso modificare x usando il riferimento y
j=q; // ha l'effetto di COPIARE il valore della variabile riferita da q nella
// locazione di memoria riferita da j!!!! non si pu modificare j perch divenga
// il riferimento ad un'altra variabile!!!!
cout << "x: " << x << " i: " << i << endl;
cout << "q: " << q << " j: " << j << endl;
Esempio
int a = 4;
incr(a);
// ora a vale 5
Errore comune
Dato che i riferimenti sono menzionati solo con il nome nel
corpo della funzione chiamata potreste trattare
inavvertitamente un riferimento come parametro passato
per valore!!!!
Restituzione di riferimenti
Riferimenti
Da C++ a UML