吃鸟的虫 2013-08-28 11:03 采纳率: 100%
浏览 2297
已采纳

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

///////////////////////////////////////////////////////
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条回答

  • CHENG Jian 操作系统领域优质创作者 2013-12-27 08: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相等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?