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