創作內容

0 GP

【寫程式教學】C++函數回傳值的差異

作者:♙♲⚙\~O_O~/⚙♲♙│2017-07-10 03:05:10│巴幣:0│人氣:606
type  func(){  ...  return obj;}
type *func(){  ...  return &obj;}
type &func(){  ...  return obj;}

以上的 type 可以是 char,short,int,string, ... 總之是個型態

概觀:
type func(){  ...  return obj;}
將 obj 內容回傳 ---- return by value
type *func(){  ...  return &obj;}
將 obj 的位址內容回傳 ---- return by value
type &func(){  ...  return obj;}
將 obj 本尊回傳 ---- return by reference

"本尊"大概可以裡解成 *(obj)
他跟obj是同個東西,所以你可以做這件事:
func()=anotherObj;

舉個例子:
#include <cstdio>
int a=1;
int &f(){return a;}
int main(const int argc,const char *argv[])
{
    f()=2;
    printf("%d\n",a);
    return 0;
}
// 最後你會看到印出是2而不是1
如果還是很不習慣的話可以跟這個比較一下
#include <stdio.h>
int a=1;
int *f(){return &a;}
int main(const int argc,const char *argv[])
{
    *(f())=2;
    printf("%d\n",a);
    return 0;
}
那如果丟區域變數會怎樣?
#include <cstdio>
int a=1;
int &f(){int a=0; return a;}
int main(const int argc,const char *argv[])
{
    f()=2;
    printf("%d\n",a);
    return 0;
}
可能看不出嚴重性,那把他換成址標
#include <stdio.h>
int a=1;
int *f(){int a=0; return &a;}
int main(const int argc,const char *argv[])
{
    *(f())=2;
    printf("%d\n",a);
    return 0;
}
也就是說對著不存在的東西作存取

所以切記,別把區域變數丟出來,會碰到已經放掉的記憶體空間
(除非你就是想這樣玩(?))



引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3638190
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:C|C++|寫程式|c|c++

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★agold404 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【寫程式教學】c++ c... 後一篇:【無聊測試中】以 goo...

追蹤私訊切換新版閱覽

作品資料夾

huaing123道德/良知在哪裡?🙂
正當路不走,盡搞些下三濫的手段,老愛玩陰的,真的不知道該說些甚麼🙂🙃🙂🙃看更多我要大聲說昨天22:27


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】