作者ntpuisbest (阿龍)
看板Programming
標題[問題] reference
時間Wed Jul 11 10:05:13 2018
剛學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://webptt.com/m.aspx?n=bbs/Programming/M.1531274716.A.AAE.html
1F:→ MOONRAKER: 沒錯超low 220.135.118.23 07/11 10:39
2F:→ MOONRAKER: 只有main才一定要有回傳值 220.135.118.23 07/11 10:40
3F:→ MOONRAKER: 其他自己寫的函數回不回傳,沒人管你 220.135.118.23 07/11 10:40
4F:→ MOONRAKER: 第一個問題你就想函數參數跟變數宣告 220.135.118.23 07/11 10:41
5F:→ MOONRAKER: 是兩回事就好了 其他你長大就會懂了 220.135.118.23 07/11 10:41
6F:推 CoNsTaR: 是先學了函數式才來碰 imperative 嗎 142.116.62.232 07/11 12:18
7F:推 CoNsTaR: 是的話 void 函數就當做是 IO () side ef 142.116.62.232 07/11 12:20
8F:→ CoNsTaR: fects 就好了 142.116.62.232 07/11 12:20
9F:→ CoNsTaR: 第一個問題因為你宣告的ref有可能沒初始 142.116.62.232 07/11 12:26
10F:→ CoNsTaR: 化就拿來用所以要規定必須在宣告的時候 142.116.62.232 07/11 12:26
11F:→ CoNsTaR: 初始化 142.116.62.232 07/11 12:26
12F:→ CoNsTaR: 然而函數不可能參數沒給齊就呼叫,所以可 142.116.62.232 07/11 12:26
13F:→ CoNsTaR: 以確定每個參數一定都會被初始化到 142.116.62.232 07/11 12:26
14F:推 miyi0630: 想成大家都有work,只是非void的函式work 117.19.160.181 07/17 05:10
15F:→ miyi0630: 完會丟一個值出來 117.19.160.181 07/17 05:10
16F:→ miyi0630: 你提的函式是把目的位置的值交換了,但 117.19.160.181 07/17 05:16
17F:→ miyi0630: 它並沒有「多」丟一個值出來XD 換個方 117.19.160.181 07/17 05:16
18F:→ miyi0630: 式說,如果你在這個函式前加上型別,你 117.19.160.181 07/17 05:16
19F:→ miyi0630: 是希望他回傳什麼東西出來0.0? 如果你 117.19.160.181 07/17 05:16
20F:→ miyi0630: 希望他傳「這個東西」回來,就要多加一 117.19.160.181 07/17 05:16
21F:→ miyi0630: 句return,就是這樣而已。 117.19.160.181 07/17 05:16
22F:→ miyi0630: 你的問題很好,這個觀念挺重要的。只是 117.19.160.181 07/17 05:19
23F:→ miyi0630: 可能誤會了回傳的意思,這個回傳跟運不 117.19.160.181 07/17 05:19
24F:→ miyi0630: 運行沒有甚麼特別的關係,就只是額外丟 117.19.160.181 07/17 05:19
25F:→ miyi0630: 一個值出來而已。 117.19.160.181 07/17 05:19
26F:→ miyi0630: 舉個例,有個函式F(a,b)會把a+b相加,如 117.19.160.181 07/17 05:30
27F:→ miyi0630: 果直接void,他還是會運行,但運行完之 117.19.160.181 07/17 05:30
28F:→ miyi0630: 後你也沒有拿到什麼;但如果用指定c=F(a 117.19.160.181 07/17 05:30
29F:→ miyi0630: ,b) ,那它就會把算完的總和丟給c。 而要 117.19.160.181 07/17 05:30
30F:→ miyi0630: 求他丟回就要用return, 前面的型別則表 117.19.160.181 07/17 05:30
31F:→ miyi0630: 示丟出來的值會是int。 因為同樣一個函 117.19.160.181 07/17 05:30
32F:→ miyi0630: 式可以丟很多不同型態的資料出來(你也可 117.19.160.181 07/17 05:30
33F:→ miyi0630: 以要求F不論如何都丟數值5出來……), 117.19.160.181 07/17 05:30
34F:→ miyi0630: 所以前面的型別只是在區分你希望他丟出 117.19.160.181 07/17 05:30
35F:→ miyi0630: 來的是什麼類型的資料而已,與運行無關 117.19.160.181 07/17 05:30
36F:→ miyi0630: 。 117.19.160.181 07/17 05:30
39F:→ miyi0630: 表演給你看 : 3 117.19.160.181 07/17 05:34
40F:→ miyi0630: 函式前面的回傳型別只與return有關,不 117.19.160.181 07/17 05:36
41F:→ miyi0630: 是你想得那種回傳>< 117.19.160.181 07/17 05:36
42F:→ ntpuisbest: 謝謝大大 61.61.12.16 07/25 11:11