[問題] reference

看板Programming作者 (阿龍)時間6年前 (2018/07/11 10:05), 編輯推噓3(3039)
留言42則, 4人參與, 6年前最新討論串1/1
剛學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

07/11 10:39, 6年前 , 1F
沒錯超low
07/11 10:39, 1F

07/11 10:40, 6年前 , 2F
只有main才一定要有回傳值
07/11 10:40, 2F

07/11 10:40, 6年前 , 3F
其他自己寫的函數回不回傳,沒人管你
07/11 10:40, 3F

07/11 10:41, 6年前 , 4F
第一個問題你就想函數參數跟變數宣告
07/11 10:41, 4F

07/11 10:41, 6年前 , 5F
是兩回事就好了 其他你長大就會懂了
07/11 10:41, 5F

07/11 12:18, 6年前 , 6F
是先學了函數式才來碰 imperative 嗎
07/11 12:18, 6F

07/11 12:20, 6年前 , 7F
是的話 void 函數就當做是 IO () side ef
07/11 12:20, 7F

07/11 12:20, 6年前 , 8F
fects 就好了
07/11 12:20, 8F

07/11 12:26, 6年前 , 9F
第一個問題因為你宣告的ref有可能沒初始
07/11 12:26, 9F

07/11 12:26, 6年前 , 10F
化就拿來用所以要規定必須在宣告的時候
07/11 12:26, 10F

07/11 12:26, 6年前 , 11F
初始化
07/11 12:26, 11F

07/11 12:26, 6年前 , 12F
然而函數不可能參數沒給齊就呼叫,所以可
07/11 12:26, 12F

07/11 12:26, 6年前 , 13F
以確定每個參數一定都會被初始化到
07/11 12:26, 13F

07/17 05:10, 6年前 , 14F
想成大家都有work,只是非void的函式work
07/17 05:10, 14F

07/17 05:10, 6年前 , 15F
完會丟一個值出來
07/17 05:10, 15F

07/17 05:16, 6年前 , 16F
你提的函式是把目的位置的值交換了,但
07/17 05:16, 16F

07/17 05:16, 6年前 , 17F
它並沒有「多」丟一個值出來XD 換個方
07/17 05:16, 17F

07/17 05:16, 6年前 , 18F
式說,如果你在這個函式前加上型別,你
07/17 05:16, 18F

07/17 05:16, 6年前 , 19F
是希望他回傳什麼東西出來0.0? 如果你
07/17 05:16, 19F

07/17 05:16, 6年前 , 20F
希望他傳「這個東西」回來,就要多加一
07/17 05:16, 20F

07/17 05:16, 6年前 , 21F
句return,就是這樣而已。
07/17 05:16, 21F

07/17 05:19, 6年前 , 22F
你的問題很好,這個觀念挺重要的。只是
07/17 05:19, 22F

07/17 05:19, 6年前 , 23F
可能誤會了回傳的意思,這個回傳跟運不
07/17 05:19, 23F

07/17 05:19, 6年前 , 24F
運行沒有甚麼特別的關係,就只是額外丟
07/17 05:19, 24F

07/17 05:19, 6年前 , 25F
一個值出來而已。
07/17 05:19, 25F

07/17 05:30, 6年前 , 26F
舉個例,有個函式F(a,b)會把a+b相加,如
07/17 05:30, 26F

07/17 05:30, 6年前 , 27F
果直接void,他還是會運行,但運行完之
07/17 05:30, 27F

07/17 05:30, 6年前 , 28F
後你也沒有拿到什麼;但如果用指定c=F(a
07/17 05:30, 28F

07/17 05:30, 6年前 , 29F
,b) ,那它就會把算完的總和丟給c。 而要
07/17 05:30, 29F

07/17 05:30, 6年前 , 30F
求他丟回就要用return, 前面的型別則表
07/17 05:30, 30F

07/17 05:30, 6年前 , 31F
示丟出來的值會是int。 因為同樣一個函
07/17 05:30, 31F

07/17 05:30, 6年前 , 32F
式可以丟很多不同型態的資料出來(你也可
07/17 05:30, 32F

07/17 05:30, 6年前 , 33F
以要求F不論如何都丟數值5出來……),
07/17 05:30, 33F

07/17 05:30, 6年前 , 34F
所以前面的型別只是在區分你希望他丟出
07/17 05:30, 34F

07/17 05:30, 6年前 , 35F
來的是什麼類型的資料而已,與運行無關
07/17 05:30, 35F

07/17 05:30, 6年前 , 36F
07/17 05:30, 36F

07/17 05:34, 6年前 , 37F

07/17 05:34, 6年前 , 38F

07/17 05:34, 6年前 , 39F
表演給你看 : 3
07/17 05:34, 39F

07/17 05:36, 6年前 , 40F
函式前面的回傳型別只與return有關,不
07/17 05:36, 40F

07/17 05:36, 6年前 , 41F
是你想得那種回傳><
07/17 05:36, 41F

07/25 11:11, 6年前 , 42F
謝謝大大
07/25 11:11, 42F
文章代碼(AID): #1RHMNSgk (Programming)
文章代碼(AID): #1RHMNSgk (Programming)