在C ++中通过引用传递函数参数的问题

时间:2014-09-26 04:18:53

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

我是c ++的新手,只是学习它。 我写了以下代码。

#include<iostream>
#include<cstdio>
using namespace std;
void first(int &x,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        cout<<x+i;
    }
    cout<<endl;
}
void second(int *x,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        cout<<*x+i;
    }
    cout<<endl;
}
int main()
{
    int exm[5]={1,2,3,4,5};
    first(exm[0],5);
    second(exm,5);

    return 0;
}

这个程序正确输出。但问题是我不明白使用&amp;和*在函数参数中... 两者都是通过引用传递参数的技术,当我们通过引用传递时,我们只发送内存地址... 但是在我第一次尝试按照以下方式调用函数时的功能

first(exm,5);

函数发生错误。 为什么? 但是当我调用函数时如下

first(exm[0],5);    

它正确编译并给出正确的输出...但我知道这两个调用是等效的... 那么为什么会出现这个错误呢? 使用&amp;有什么区别和*在函数参数?

1 个答案:

答案 0 :(得分:1)

变量exm的类型为int[5],不符合first(int &x,int n)的签名。
但是int[N]可以隐式转换为int*,指向数组的第一个元素,因此second(exm,5)可以编译。

  

使用&amp;的区别是什么?和*在函数参数?

这是引用和指针之间的区别。

它们之间存在很多差异 在这种情况下,我认为最大的区别是它是否接受NULL。

请参阅:
- What are the differences between a pointer variable and a reference variable in C++?
- Are there benefits of passing by pointer over passing by reference in C++?
- difference between a pointer and reference parameter?