看板 Programming 關於我們 聯絡資訊
剛學CPP 看書看到reference 必須初始化值 所以比如說 int a=5; int & ref.a=a; 這樣是正確的 但是以下會是錯誤的 int a=5; int & ref.a; ref.a=a; 但是下面這樣卻會是可以用的? void swap(int &a, int &b){ int tmp = a; a = b; b = a; } 我的理解是上述的程式碼 代表a是一個reference 但是我並沒有給a一個值馬上指定阿 為何這樣可以work? 還有一直不懂 為何要在程式碼前加一個void 我知道是指有沒有回傳值 而沒有回傳值 是要怎麼WORK啦 抱歉問題真的很LOW -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.237.189 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1531274716.A.AAE.html
MOONRAKER: 沒錯超low 220.135.118.23 07/11 10:39
MOONRAKER: 只有main才一定要有回傳值 220.135.118.23 07/11 10:40
MOONRAKER: 其他自己寫的函數回不回傳,沒人管你 220.135.118.23 07/11 10:40
MOONRAKER: 第一個問題你就想函數參數跟變數宣告 220.135.118.23 07/11 10:41
MOONRAKER: 是兩回事就好了 其他你長大就會懂了 220.135.118.23 07/11 10:41
CoNsTaR: 是先學了函數式才來碰 imperative 嗎 142.116.62.232 07/11 12:18
CoNsTaR: 是的話 void 函數就當做是 IO () side ef 142.116.62.232 07/11 12:20
CoNsTaR: fects 就好了 142.116.62.232 07/11 12:20
CoNsTaR: 第一個問題因為你宣告的ref有可能沒初始 142.116.62.232 07/11 12:26
CoNsTaR: 化就拿來用所以要規定必須在宣告的時候 142.116.62.232 07/11 12:26
CoNsTaR: 初始化 142.116.62.232 07/11 12:26
CoNsTaR: 然而函數不可能參數沒給齊就呼叫,所以可 142.116.62.232 07/11 12:26
CoNsTaR: 以確定每個參數一定都會被初始化到 142.116.62.232 07/11 12:26
miyi0630: 想成大家都有work,只是非void的函式work 117.19.160.181 07/17 05:10
miyi0630: 完會丟一個值出來 117.19.160.181 07/17 05:10
miyi0630: 你提的函式是把目的位置的值交換了,但 117.19.160.181 07/17 05:16
miyi0630: 它並沒有「多」丟一個值出來XD 換個方 117.19.160.181 07/17 05:16
miyi0630: 式說,如果你在這個函式前加上型別,你 117.19.160.181 07/17 05:16
miyi0630: 是希望他回傳什麼東西出來0.0? 如果你 117.19.160.181 07/17 05:16
miyi0630: 希望他傳「這個東西」回來,就要多加一 117.19.160.181 07/17 05:16
miyi0630: 句return,就是這樣而已。 117.19.160.181 07/17 05:16
miyi0630: 你的問題很好,這個觀念挺重要的。只是 117.19.160.181 07/17 05:19
miyi0630: 可能誤會了回傳的意思,這個回傳跟運不 117.19.160.181 07/17 05:19
miyi0630: 運行沒有甚麼特別的關係,就只是額外丟 117.19.160.181 07/17 05:19
miyi0630: 一個值出來而已。 117.19.160.181 07/17 05:19
miyi0630: 舉個例,有個函式F(a,b)會把a+b相加,如 117.19.160.181 07/17 05:30
miyi0630: 果直接void,他還是會運行,但運行完之 117.19.160.181 07/17 05:30
miyi0630: 後你也沒有拿到什麼;但如果用指定c=F(a 117.19.160.181 07/17 05:30
miyi0630: ,b) ,那它就會把算完的總和丟給c。 而要 117.19.160.181 07/17 05:30
miyi0630: 求他丟回就要用return, 前面的型別則表 117.19.160.181 07/17 05:30
miyi0630: 示丟出來的值會是int。 因為同樣一個函 117.19.160.181 07/17 05:30
miyi0630: 式可以丟很多不同型態的資料出來(你也可 117.19.160.181 07/17 05:30
miyi0630: 以要求F不論如何都丟數值5出來……), 117.19.160.181 07/17 05:30
miyi0630: 所以前面的型別只是在區分你希望他丟出 117.19.160.181 07/17 05:30
miyi0630: 來的是什麼類型的資料而已,與運行無關 117.19.160.181 07/17 05:30
miyi0630: 。 117.19.160.181 07/17 05:30
miyi0630: https://i.imgur.com/qJzJj7l.jpg 117.19.160.181 07/17 05:34
miyi0630: https://i.imgur.com/Pu5C23h.jpg 117.19.160.181 07/17 05:34
miyi0630: 表演給你看 : 3 117.19.160.181 07/17 05:34
miyi0630: 函式前面的回傳型別只與return有關,不 117.19.160.181 07/17 05:36
miyi0630: 是你想得那種回傳>< 117.19.160.181 07/17 05:36
ntpuisbest: 謝謝大大 61.61.12.16 07/25 11:11