作者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/cn.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