例子一:引用作为函数返回值
#include<iostream>
using namespace std;
int& f2(int a[],int i);
int main()
{
int a[] = {1,2,3,4,5};
int n = f2(a,3);
f2(a,3) = 14;//相当于a[3];
cout<<n<<endl;//4
for(int i=0;i<5;i++)
cout<<a[i]<<" ";//1,2,3,14,5
cout<<endl;
return 0;
}
//返回的是一个引用,也就是返回a[i]的引用
int& f2(int a[],int i)
{
return a[i];
}
例子二:指针作为函数返回值
#include<iostream>
using namespace std;
//返回一个指针,可以通过解引用修改值
int* f2(int a[],int i);
int main()
{
int a[] = {1,2,3,4,5};
//f2函数返回的是一个指针,需要解引用取内容
cout<<*f2(a,2)<<endl;//3
//f2返回的是一个指针,也只能赋值给指针类型的变量
int *n = f2(a,2);
cout<<*n<<endl;//3
//通过函数返回的指针地址修改对应的内容
*f2(a,3) = 14;//相当于a[3];
for(int i=0;i<5;i++)
cout<<a[i]<<" ";//1 2 3 14 5
cout<<endl;
return 0;
}
int* f2(int a[],int i)
{
return &a[i];
}
例子三:通过返回引用修改类的私有成员数据
#include<iostream>
using namespace std;
class C
{
public:
//返回一个引用,也就是n的引用
int& getReFN()
{
return n;
}
int getN()
{
return n;
}
private:
int n;
}c;
int main()
{
//将返回的引用赋值给k,k和n是一样的
//尽管n声明为私有,但是执行下条语句时候,就可以在外界通过k随意访问该变量
int& k = c.getReFN();
k = 7;
cout<<c.getN()<<endl;//7
c.getReFN() = 9;
cout<<c.getN()<<endl;//9
}
追加:
函数返回引用对于大型数据结构比较好,不用返回值复制一遍,并且对于指针来说可读性强,静态引用参数安全性比指针更高!