Вы передаете ссылку, которая не является указателем и не адресом - но она похожа.
Что такое "точно" ссылка, не задокументирована.Стандарт не диктует механизмы обращения со справочной информацией - только последствия их использования. Обычно , они будут реализованы как указатели.
Пример:
int foo(int& a, int& b) { a = b; }
// Usage
int x, y;
foo(x, y);
Может генерироваться тот же машинный код, что и:
int foo(int* a, int* b) { *a = *b; }
// Usage
int x, y;
foo(&x, &y);
Но это не гарантируется, и они НЕ эквивалентны (хотя они предоставляют схожую функциональность).
Когда вы берете адрес ссылки, вы получаете тот же адрес, что и объект, на который она ссылается.Пример:
void foo(int& x) { std::cout << &x << std::endl; }
int y;
std::cout << &y << std::endl;
foo(); // This will print the same as above.