se passi per valore, la variabile passata non è modificata, se passi per indirizzo (o reference, come preferisci) l'effetto si ripercuote, xkè non viene fatta una copia del valore della variabile, ma si "PUNTA" all'indirizzo di memoria della variabile, quindi modifichi il contenuto della cella di memoria e ovviamente il contenuto.
esempio.
chiamandocodice:void indirizzo (int *x) { *x = 5 * (*x); } int valore (int x) { return 5*x; } void main() { int prova = 10; cout << valore (prova); // Stampa 50 // prova vale ancora 10 cout << prova ; // Stampa 10 indirizzo (&prova); // Ora prova ha cambiato valore cout << prova ; // Stampa 50 }