[问题] 传值/址呼叫的问题

楼主: 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