因此,我是指针/地址的新手,并且我有一个泛型函数,可打印作为参数传递给它的变量的地址。但是,在以下代码段中,尽管地址属于同一变量,但为什么地址却不同?
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
有人可以解释这种行为为什么会发生吗?
答案 0 :(得分:2)
因为变量不同,所以值是相同的。
在函数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