Итак, я новичок в указателях / адресах, и у меня есть общая функция, которая печатает адрес переменной, переданной ей в качестве параметра. Однако в следующем фрагменте почему адреса разные, несмотря на то, что они принадлежат одной и той же переменной?
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
Может кто-нибудь объяснить такое поведение, почему это происходит?
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
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .