用指针参数和参考参数调用Funcs

时间:2013-12-09 18:21:25

标签: c++ pointers reference function-calls

我希望有人可以向我解释为什么会调用带参考参数的函数而不是带有指针参数的函数,具体如下:

int Func1 ( int & a );
int Func1 ( int * a );

int main()
{
   int y = 1;
   int & x = y;
   int * z = & y;

   Func1(y); // Calls reference version
   Func1(&y); // Calls pointer version
   Func1(z); // Calls pointer version

   return 0;
}

int Func1 ( int & a )
{
    cout << "Reference param Func1 called" << endl;
    a = a + 1;

    return a + 1;
}

int Func1 ( int * a )
{
    cout << "Pointer param Func1 called" << endl;
    *a = *a + 1;

    return *a + 1;
}

我很困惑如何决定为Func1(&amp; y)调用而不是Func1的引用参数版本调用Func1的指针参数版本。另外,为什么没有为Func1(z)调用选择Func1的参考参数版本?如果z保存一个地址,我不明白为什么地址不能传递给Func1(&amp; a)的参考参数。

1 个答案:

答案 0 :(得分:1)

int Func1 ( int & a );匹配参数表达式具有类型int的调用(并且有资格对其进行非const引用)。 int Func1 ( int * a );匹配参数表达式为int*的调用。

  

如果z持有地址,我不明白为什么地址无法传递到Func1(&amp; a)的参考参数。

嗯,你可以通过拨打Func1(*z)来实现这一点。