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.

codice:
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
}
chiamando