Итак, я новичок в указателях / адресах, и у меня есть общая функция, которая печатает адрес переменной, переданной ей в качестве параметра. Однако в следующем фрагменте почему адреса разные, несмотря на то, что они принадлежат одной и той же переменной?

template <typename T>
void printAddressOf(T t)
{
    std::cout << &t << std::endl;
}

int main(int argc, char **argv)
{
    int x = 12;

    printAddressOf(x);
    std::cout << &x;

    return 0;
}

Значения, которые я получаю на выходе, следующие ...

0x7ffee2c6f86c
0x7ffee2c6f89c

Может кто-нибудь объяснить такое поведение, почему это происходит?

c++
-3
getchar 5 Окт 2018 в 20:04

1 ответ

Лучший ответ

Поскольку переменные не совпадают, значения совпадают.

В вашем списке аргументов для функции printAddressOf(T t) вы не передаете ссылку на переменную. Вместо этого вы передаете копию. Итак, в этой области создается новая переменная T t.

Измените функцию на

template <typename T>
void printAddressOf(T& t)
{
    std::cout << &t << std::endl;
}

И вы увидите, что адрес такой же

printAddressOf(x)             0x7ffee2c6f89c
std::cout << &x << std::endl; 0x7ffee2c6f89c
2
Dan 5 Окт 2018 в 17:09