頁:
[1]
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> 有點觀念上的卡關,請教各位高手
若今天一個函式這麼寫..
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> 感謝分享~
我就是看了這個網站才衍生出疑問
文中的傳回參考是這樣寫
string& foo()
{
string *s = new string("This is caterpillar speaking.");
cout << "address: " << s << endl << *s << endl;
return *s;
}
我的疑問就在,最後是return *s,不是指標嗎? 那定義函式的回傳值型態怎麼會是用string& ?
感謝解惑! 你應該先瞭解 indirection operator「*」是什麼
int i = 10;
int* p = &i;
cout << p << endl;
cout << *p << endl;
你應該先瞭解 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> 如果你知道 *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 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]