看板java
標 題Re: [問題] 請教傳值呼叫(call by valu)的問題
發信站摩卡小築 (Tue Feb 21 19:49:26 2006)
轉信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!bbs.ee.ntu!zoonews.ee.ntu!L
※ 引述《[email protected]》之銘言:
> 小弟在書上看到Call by value的一個範例,有兩個問題想請教板友們...
> 先附上程式碼:
> 1 class
> 2 {
> 3 public static void main(String args[])
> 4 {
> 5 int x=10;
> 6 System.out.println("呼叫process方法前,x的值為" +x);
> 7 process(x);
> 8 System.out.println("呼叫process方法後,x的值為" +x);
> 9 }
> 10 static void process(int y)
> 11 {
> 12 y+=10;
> 13 System.out.println("process這方法中的 y =" +y);
> 14 }
> 15 }
> 執行結果:
> 呼叫process方法前,x的值為 10
> process這方法中的 y =20
> 呼叫process方法後,x的值為 10
> 小弟的問題:
> 為何排序不是"process這方法中的 y =20"在最後面,
> 而是"呼叫process方法後,x的值為 10"在最後面呢?
> 另外,第七行為process(x),第十行為process(int y),
> 一個是x,一個是y,為什麼x會傳給process(int y)呢?兩者有什麼關係嗎?
首先你知道什麼就做call by value 和 call by address嘛?
這兩個你必須先查清楚(JAVA和C#用法與C++有點不一樣..這個要分清楚)
首先這是個call By value方始呼叫副程式
而x和y事扮演actual 和 formal (詳見程式語言XD)
因為解釋起來也是文謅謅 所以醬說好了
當執行process(x)時 他只是把X的值10"複製"給Y
同時!
執行權就交給副程式static void process(int y)
當Y加10印出來20完後..執行完畢
執行全會再度交回得主程式..也就是有被冠上main的那隻
我想你會認知錯誤可能是身受"C語言的結構循序化"
不過..C語言也有副程式說..
總之..你必須買本書
先把前幾張讀完
在範例去學習..不久之後無師自通(..當然..有老師更快)
--
┌───曾經有人對我說...
│ 在悲傷的對岸 據說可以找到微笑──┐
│ 好不容易到達後 │
└──我只找到失落.... ──For KARU
--
※ Origin: 摩卡小築 <moca.csie.chu.edu.tw>
◆ From: 218-168-205-79.dynamic.hinet.net