作者Boom3 (boom3)
看板C_Sharp
標題[問題] 傳值呼叫的問題
時間Sat Jan 10 13:31:41 2015
private void btncbv_Click(object sender, EventArgs e)
{
int x = 5;
lblcbv1.Text = string.Format("參數傳遞之前的值:{0}", x);
callbyvalue(x);
lblcbv2.Text = string.Format("參數傳遞之後的值:{0}", x);
}
private int callbyvalue(int y)
{
y += 1;
return y;
}
執行起來沒問題,但我想問的是
為何lblcbv2.text的值是5不是6。
可是我有rerutn回去阿?
但我如果把callbyvalue(x); 放到裡面,如下
lblcbv2.Text = string.Format("參數傳遞之後的值:{0}", callbyvalue(x));
這時候顯示的就是6了。
我知道可以用ref的方式,
但為什麼上面這個例子會是這樣?
剛學C#! 麻煩各位~謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.126.243
※ 文章網址: http://webptt.com/m.aspx?n=bbs/C_Sharp/M.1420867904.A.F2D.html
※ 編輯: Boom3 (60.248.126.243), 01/10/2015 13:32:39
1F:推 BigLoser: 因為是call by value阿..所以是5 01/10 14:10
2F:→ BigLoser: 我有一個x是5,我有一個y,我給予y跟x一樣的值也是5 01/10 14:11
3F:→ BigLoser: 今天y變成6了,x當然還是5 01/10 14:12
4F:→ BigLoser: ------------------------------------------ 01/10 14:12
5F:→ BigLoser: 當你印出5的時候是因為,你印了x 01/10 14:13
6F:→ BigLoser: 當你印出6的時候是因為,你印了y 01/10 14:13
7F:→ ssccg: 你有return回去,你又沒assign給x 01/10 16:56
8F:→ ssccg: return的意思是 callbyvalue(x) 這個expression值是return 01/10 16:57
9F:→ ssccg: 的值,不會動到傳進去的參數x 01/10 16:57
10F:→ ssccg: 你應該先搞清楚function、return是在做什麼 01/10 16:58
11F:→ ssccg: 想想如果沒有x,你是用callbyvalue(5),那5會變成6? 01/10 17:00
12F:→ andymai: 如果要探討"傳值/傳址"的話~應該要去官網看一下... 01/11 04:01
14F:推 Nowtreel: 若您x想變6 必須 x=callbyvalue(x); x才會是return的值 01/11 08:11
15F:→ Boom3: 謝謝各位! 01/13 18:50