I know, if we define a function in C++, we can pass, as parameters, pointers. For instance, int function (int* a){ // }. When doing this, we can use that pointer (a) with & and * operators and, this way, be able to modify the original variable passed as parameter.
The latter is also the purpose of passing parameters by reference. However, it's a little bit different. When we call a function declared like this: int function (int &a), a int variable must be passed as parameter and not a pointer as it had been in the previous case. In consequence, inside the second function, we use the parameter a normal way (as a int), but the original value (in the scope where the function is called from) can change.
Many people told me that it's because, when using passing parameters by reference, we are passing, actually, a pointer instead of the value. Is it really true? is there any other explanation? What's the difference between the first and the second function? I would really appreciate your help.