当我们通过引用传递时,为什么在调用函数时我们放置一个变量而不是地址(指针)?

时间:2013-06-20 10:48:58

标签: c++ pointers pass-by-reference

void ChangeValueByReference(int &x)
{
    x = 0;
}

int main()
{
    int a = 1;
    ChangeValueByReference(a);
    cout << a;
}

为什么我们在main()中调用该函数时不放ChangeValueByReference(&a);

因为在定义函数时,我们说我们将传递一个指针void ChangeValueByReference(int &x){...}

2 个答案:

答案 0 :(得分:3)

这是因为当在不同的地方(声明/陈述)使用时,&符有两种不同的含义。

void MyFn(Type & a);

这里&amp;作为“修饰符的引用”。

Type * pA = &a;

这里&amp;用作“获取指针”运算符。请注意,如果您的变量a类型为Type,则&a会返回Type *(指向Type的指针)。

当您将变量传递给函数时,编译器会自动获取对变量的引用。所以你可以简单地打电话:

ChangeValueByReference(someVariable);

编译器会知道,它必须得到someVariable的引用。

答案 1 :(得分:1)

我们没有说我们会传递一个指针。我们说过我们会给出一个参考。对变量的引用可能在内部像指针一样处理,但它不是指针。指针可以是0 - 不是引用。