作者ARCHERDEVIL (開弓)
看板Examination
標題Re: [課業] 程式語言考題一問
時間Tue Apr 21 22:18:13 2015
※ 引述《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