C++引用???

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:18:34
#include <iostream.h>
int &f1(int n,int s[])
{
int &m=s[n]; //问题(1)
return m;
}
int main()
{
int s[]={5,4,3,2,1,0};
f1(3,s)=10; //问题(2)
cout<<f1(3,s)<<endl;
return 0;
}

程序输出结果为:
10

上面的程序我有两个不明白的地方:
函数f1(int n,int s[])是返回一个引用,要是把问题(1)处的&m改为m的话,程序输出结果为2,而且会出现一个警告:returning address of local variable or temporary.我不明白为什么修改后结果不同的原因是什么?还有就是问题(2)处f1(3,s)=10;为什么能把一个常数赋值给一个函数,它这里是什么意思?请大虾指点以上两个问题.!谢谢!!!

问题(1)处的&m改为m的话,程序输出结果为2
是因为你在函数中有f1(3,s)=10;并不是将10给了s[3],而是给了没有实际意义的m.m与 s[3]没有属于不同的变量

returning address of local variable or temporary.
是因为&m改为m,导致f1(3,s)返回的引用变量,没有实际意义,因为子程序一退出,m自动撤消。

int &m=s[n]的作用是:m等同于s[n]; 以后对m的操作 就等同于对s[n];m以后虽然撤消,但s[n]仍然存在,即他们指向同一个地址。

为什么能把一个常数赋值给一个函数?
这是引用的一个应用,是c++的一个长处,表示返回一个变量的引用,即他本身,所以可以对此赋值,也可以这样 int &x=f1(3,s),这样x的值就会与m相同。

是10,你把10赋给了变量m;
int s[]={5,4,3,2,1,0};
f1(3,s)=10; //执行这步后,s[]={5,4,3,10,1,0};
后又cout<<f1(3,s);所以。。。
但是这样的程序不好,因为m是局部变量