2 rentao315 rentao315 于 2013.08.28 19:03 提问

引用值作为函数的返回值的困惑

///////////////////////////////////////////////////////
double array[5] = {100.1, 100.2, 100.3, 100.4, 100.5};
double cd = 5.2;

double &change(int i)
{
return array[i];
}

void TestConstReturnVaulefun()
{

int i;

cout<<"原始值如下: ";
for(i = 0; i < 5; i++)
    cout << array[i] <<" ";
cout<<endl;

change(2) = 3.14;
change(3) = -99.99;

cout<<"修改后如下: ";
for(i = 0; i < 5; i++)
    cout<<array[i]<<" ";
cout<<endl;


double c = change(1);
c = 3.5;

cout<<"修改后如下: ";
for(i = 0; i < 5; i++)
    cout<<array[i]<<" ";
cout<<endl;

}
输出结果为:
原始值如下: 100.1 100.2 100.3 100.4 100.5
修改后如下: 100.1 100.2 3.14 -99.99 100.5
修改后如下: 100.1 100.2 3.14 -99.99 100.5

疑问为什么第3行不是3.5 而是100.1呢?
求原理分析

1个回答

gatieme
gatieme   2013.12.27 16:53
已采纳

double &change(int i)
{
return array[i];
}
函数的返回值指向数组第i个元素的引用。
那么
①double c = change(1);的问题
它等价于double c = array[1];
具体来说就是
double &temp = array[1];
double c = temp;
c = 3.5;
变量c和array[1]占用的是不一样的空间,更改c的值,必然无法对array[1]产生影响

②change(2) = 3.14;
等价于int &temp = array[2]; temp = 3.14,
这样就容易理解了吧

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!