Re: [課業] 程式語言考題一問
※ 引述《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
推
04/21 23:43, , 1F
04/21 23:43, 1F
→
04/21 23:50, , 2F
04/21 23:50, 2F
→
04/21 23:51, , 3F
04/21 23:51, 3F
→
04/21 23:51, , 4F
04/21 23:51, 4F
→
04/22 00:02, , 5F
04/22 00:02, 5F
→
04/22 00:04, , 6F
04/22 00:04, 6F
→
04/22 00:07, , 7F
04/22 00:07, 7F
→
04/22 00:07, , 8F
04/22 00:07, 8F
推
04/22 00:16, , 9F
04/22 00:16, 9F
推
04/22 00:32, , 10F
04/22 00:32, 10F
不要謝太快... 我說的其實不一定正確...
就像上面直接跑程式的lei大說的一樣
跑程式的話答案是222
我說一下這種說法哪裡看來的:高點的程式語言(我忘記是胡世雄還是王致強
除非我記錯出處...@@
因為我手上現在沒有書
如果我寫錯的話...
先在這邊道個歉orz
推
04/22 01:04, , 11F
04/22 01:04, 11F
→
04/22 01:04, , 12F
04/22 01:04, 12F
→
04/22 01:09, , 13F
04/22 01:09, 13F
→
04/22 01:10, , 14F
04/22 01:10, 14F
→
04/22 03:34, , 15F
04/22 03:34, 15F
※ 編輯: ARCHERDEVIL (61.70.223.186), 04/22/2015 06:17:22
推
04/23 06:56, , 16F
04/23 06:56, 16F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
課業
5
16