#inlcude<iostream>
using namespace std;
int & change(int);
int a[5]={10,20,30,40,50};
int main()
{
int i;
for(i=0;i<5;i++)
change(i)=a[i]+5;
for(i=0;i<5;i++)
cout<<" "<<a[i]<<endl;
}
int & change(int i)
{
return a[i];
}
有效。我们怎样才能正常左侧?为什么它没有给我错误左值是必需的?
请解释它是如何工作的以及参考变量如何在函数中返回?
答案 0 :(得分:4)
此处,change(i)
通过引用返回int
类型的值。
在C ++中通过引用返回值
通过使用引用而不是指针(无分段错误),可以使C ++程序更易于阅读和维护。 C ++函数可以以与返回指针类似的方式返回引用。
当函数返回引用时,它返回一个指向其返回值的隐式指针。这样,函数可以在赋值语句的左侧使用。所以change(i)=a[i]+5;
是一个可接受且正确的陈述。
指针和引用之间的关键区别是,引用不能是NULL
,而指针可以。声明时必须初始化引用。
int i;
int &j = i; // Acceptable
int &k; // Not Acceptable
int &l = NULL; // Not Acceptable
int *p = NULL; // Acceptable
int *p1 = &i; // Acceptable
答案 1 :(得分:1)
您正在返回一个左值。
非const引用只能绑定到左值。您正在返回对内存中数组的引用。这是一个左值。所以它有效。
这不起作用:
int & change(i) {
return 7;
}
7没有内存地址,它是一个常量。它不会绑定到返回类型。
答案 2 :(得分:0)
您的数组由值引用组成。您的change(i)
返回对值的引用,并在您修改它之后