[問題] 傳值/址呼叫的問題

作者: Boom3 (boom3)   2015-01-10 13:31:41
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#! 麻煩各位~謝謝
作者: BigLoser (大魯蛇)   2015-01-10 14:10:00
因為是call by value阿..所以是5我有一個x是5,我有一個y,我給予y跟x一樣的值也是5今天y變成6了,x當然還是5------------------------------------------當你印出5的時候是因為,你印了x當你印出6的時候是因為,你印了y
作者: ssccg (23)   2015-01-10 16:56:00
你有return回去,你又沒assign給xreturn的意思是 callbyvalue(x) 這個expression值是return的值,不會動到傳進去的參數x你應該先搞清楚function、return是在做什麼想想如果沒有x,你是用callbyvalue(5),那5會變成6?
作者: andymai (人生只有一次)   2015-01-11 04:01:00
如果要探討"傳值/傳址"的話~應該要去官網看一下...http://tinyurl.com/l2tkrhz 傳遞參數
作者: Nowtreel (盜版陳金城)   2015-01-11 08:11:00
若您x想變6 必須 x=callbyvalue(x); x才會是return的值
作者: Boom3 (boom3)   2015-01-13 18:50:00
謝謝各位!

Links booklink

Contact Us: admin [ a t ] ucptt.com