为什么同一变量的内存地址不同?

时间:2018-10-05 17:04:01

标签: c++

因此,我是指针/地址的新手,并且我有一个泛型函数,可打印作为参数传递给它的变量的地址。但是,在以下代码段中,尽管地址属于同一变量,但为什么地址却不同?

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 个答案:

答案 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