To put it simply, when passing by value, the value of the variable you put in is copied over to the variable in the argument list of the function.
For a reference, the variables in the argument list of the function becomes aliases to the real variable you pass in.
int& is a reference to an int.
To see this in action, make a function that modifies its arguments. Eg:
Code:
void foo(int & n) { n = 10; }
Do that with and without the reference and you will soon realize what happens.
Hint: print out the value of the variable you call the function with.