程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 引用 返回值-引用值作為函數的返回值的困惑

引用 返回值-引用值作為函數的返回值的困惑

編輯:編程綜合問答
引用值作為函數的返回值的困惑

///////////////////////////////////////////////////////
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呢?
求原理分析

最佳回答:


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相等。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved