看板 Examination 關於我們 聯絡資訊
※ 引述《pringles27 (拉拉)》之銘言: : 請問各位大大 : 103年高考程設問題 : 題目: : program b(){ : function a(x:integer){ : x=x+1; : write(x,y); : } : var y:integer; : y=1; : a(y); : write(y) : } : 其中以Y is passed by reference : 印出的結果為多少? : 高點答案是 2 1 而非 2 2 : 2 2 : 好奇的地方是reference不是共用記憶體 : 所以y在裡面時不是應該已變為2了嗎? : 還是須等到}結束才把結果回寫回記憶體呢? : 是我觀念有誤嗎? 請大大解惑?? 我解釋一下,如果有錯請各位見諒,有一段時間沒看書了orz pass by reference & pass by address是有差別的 pass by reference 是在找不到的時候順著鏈結往外找,直到找到參考為止 但如果找得到就直接使用,最後等function a()結束之後,把值寫回被參照的變數內 換句話說.. 原題目裡面function a()有內容中有定義x,可是沒有定義y 因此使用x的時候,直接用參照值,參照到a(y)中y的值 但因為function a()內容中沒有定義y 所以function a()內部需要y的時候就必須透過鏈結方法向外層去找 最後找到外面的y 所以function a()裡面write(x,y)的結果是2 1 最後等到function a ()結束之後,參照的變數值會被參照回去 這邊要說一下 reference是相互的,但不是立刻改變的 參照變數與被參照變數的關係是 參照變數會去取用被參照變數的值 等到function 結束之後,才會把最後的結果回傳給被參照變數儲存 所以最後寫回去之後,外面的write(y)就會輸出2 想想看什麼叫做reference? 參考參照 實際上並不是不同變數名稱使用同一個address對應的值 只是參考使用而已 不知道這樣你看得懂嗎...@@ -- 我應該是沒寫錯... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.70.223.186 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1429625896.A.5CC.html ※ 編輯: ARCHERDEVIL (61.70.223.186), 04/21/2015 22:38:30
APE36: 推,好文 04/21 23:43
emstarbucks: 傳參考不是應該只是將傳進去的y 取一個暱稱叫x 04/21 23:50
emstarbucks: 但是實際上 x 仍然是y 嗎 ?? 04/21 23:51
emstarbucks: 所以 x 變了 真正的y 也會變 04/21 23:51
emstarbucks: A reference variable is an alias. 04/22 00:02
emstarbucks: 應該是用同一塊記憶體空間吧@@? 04/22 00:04
emstarbucks: Call by value: get a copy 04/22 00:07
emstarbucks: Call by reference:get an alias 04/22 00:07
lei70200: 直接跑程式出來結果也是222 04/22 00:16
pringles27: 謝謝大大 若以這角度來看 的確合理 04/22 00:32
不要謝太快... 我說的其實不一定正確... 就像上面直接跑程式的lei大說的一樣 跑程式的話答案是222 我說一下這種說法哪裡看來的:高點的程式語言(我忘記是胡世雄還是王致強 除非我記錯出處...@@ 因為我手上現在沒有書 如果我寫錯的話... 先在這邊道個歉orz
lei70200: reference跟address的差別不是應該是差在自身等於別人的 04/22 01:04
lei70200: address跟自身參考到別人的address的差別嗎@@? 04/22 01:04
lei70200: 指向 04/22 01:09
lei70200: 這篇的說法第一次看到@@有沒有相關資料可以參考一下? 04/22 01:10
emstarbucks: 樓上我也覺得reference和address是這樣@@ 04/22 03:34
※ 編輯: ARCHERDEVIL (61.70.223.186), 04/22/2015 06:17:22
fcouple: 推!!謝謝弓大。 04/23 06:56