No, the reference does not store the address of the variable for which it is another name. The equivalency is a compiler issue. You cannot have an unitialized reference. When a reference is passed to a function, the value passed is the same value that would be passed if the original were used. This is, of course, at this point, an address, but there is one less level of indirection than there would be if a pointer were passed.

You might want to write some code using a pointer and a reference and examine the assembly-language code that is emitted by the compiler.