我是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;有什么区别和*在函数参数?
答案 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?