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

Problems with functions parameters in pass by references in C++

本文关键字:参数 问题 函数 引用 C++      更新时间:2023-10-16

我是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;
}

这个程序输出正确。但问题是我不明白使用&和*在函数参数中。。。两者都是通过引用传递参数的技术,当我们通过引用传递时,我们只发送内存地址。。。但在函数中,当我尝试调用函数时,首先是

first(exm,5);

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

first(exm[0],5);    

它编译正确,输出正确。。。但我知道这两个调用是等价的。。。那么为什么会出现这种错误呢
使用&以及函数参数中的*?

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

使用&以及函数参数中的*?

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

他们之间有很多不同
在这种情况下,我认为最大的区别是它是否接受NULL。

请参阅:
-C++中的指针变量和引用变量之间有什么区别
-在C++中,通过指针传递比通过引用传递有好处吗
-指针和引用参数之间的区别?