查看完整版本: c++ 函式回傳值的問題
頁: [1]

xshane831 發表於 2011-9-7 04:40 PM

c++ 函式回傳值的問題

本帖最後由 xshane831 於 2011-9-7 04:44 PM 編輯

有點觀念上的卡關,請教各位高手
若今天一個函式這麼寫..
int& re()
{  
  ...  
  return a;
}
我對它的解釋是,該函式設定回傳值型態是參考,a是一個變數的參考,這樣對嗎?

而我有看到有種寫法是
int& re()
{
   ...
   return *a;
}
那這樣的解釋是否為回傳指標a,但為何回傳值型態也是設定int& ? 為何不是 int* ?
請教各位了! 感謝!...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

Force[TW] 發表於 2011-9-7 04:59 PM

有點觀念上的卡關,請教各位高手
若今天一個函式這麼寫..
int& re()
{  
  ...  
  return a;
}
我對 ...
xshane831 發表於 2011-9-7 04:40 PM http://www.eyny.com/images/common/back.gif

請服用這一篇文章:C++ Gossip: return 的傳值、傳參考(良葛格)。:biggrin:...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

xshane831 發表於 2011-9-7 05:15 PM

感謝分享~
我就是看了這個網站才衍生出疑問
文中的傳回參考是這樣寫
string& foo()
{  
string *s = new string("This is caterpillar speaking.");  
cout << "address: " << s  << endl << *s << endl;  
return *s;
}
我的疑問就在,最後是return *s,不是指標嗎? 那定義函式的回傳值型態怎麼會是用string& ?
感謝解惑!

kaworucloud 發表於 2011-9-7 05:36 PM

你應該先瞭解 indirection operator「*」是什麼
int i = 10;
int* p = &i;
cout << p << endl;
cout << *p << endl;

xshane831 發表於 2011-9-7 05:48 PM

你應該先瞭解 indirection operator「*」是什麼
kaworucloud 發表於 2011-9-7 05:36 PM http://www02.eyny.com/images/common/back.gif

感謝分享~
第一行是記憶體位置
第二行是10 ?
還是我對於*有誤會?Orz<br><br><br><br><br><div></div>

kaworucloud 發表於 2011-9-7 06:02 PM

如果你知道 *p 是什麼,那麼你就能辨別 foo 與 bar 正確與否了吧?
int i = 10;
int* p = &i;

int* foo(){
    return *p;
}

int& bar(){
    return *p;
}

int main(){
    int* ptr = foo();
    int& ref = bar();
}

xshane831 發表於 2011-9-7 06:43 PM

本帖最後由 xshane831 於 2011-9-7 07:02 PM 編輯

如果你知道 *p 是什麼,那麼你就能辨別 foo 與 bar 正確與否了吧?
kaworucloud 發表於 2011-9-7 06:02 PM http://www02.eyny.com/images/common/back.gif
感謝大大~ 我的想法如下..不知這樣解釋是否觀念有正確
foo()是錯的,因為return *p是數值10,而非定義函式的回傳型態為整數指標型態(若回傳p(記憶體位置)就正確,因為指標存放的值是記憶體位置且指向整數10)
bar()是正確的,因為return *p是數值,而定義函式的回傳型態為整數參考,參考至整數10
所以定義回傳型態為參考而不是int就好,是因為某些因素需要用到同一塊記憶體的數值?
也就是&ref、*p都屬同一塊記憶體...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]