吃鸟的虫 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 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用