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

看板C_Sharp (C#)作者 (boom3)時間10年前 (2015/01/10 13:31), 10年前編輯推噓2(2013)
留言15則, 5人參與, 最新討論串1/1
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://www.ptt.cc/bbs/C_Sharp/M.1420867904.A.F2D.html ※ 編輯: Boom3 (60.248.126.243), 01/10/2015 13:32:39

01/10 14:10, , 1F
因為是call by value阿..所以是5
01/10 14:10, 1F

01/10 14:11, , 2F
我有一個x是5,我有一個y,我給予y跟x一樣的值也是5
01/10 14:11, 2F

01/10 14:12, , 3F
今天y變成6了,x當然還是5
01/10 14:12, 3F

01/10 14:12, , 4F
------------------------------------------
01/10 14:12, 4F

01/10 14:13, , 5F
當你印出5的時候是因為,你印了x
01/10 14:13, 5F

01/10 14:13, , 6F
當你印出6的時候是因為,你印了y
01/10 14:13, 6F

01/10 16:56, , 7F
你有return回去,你又沒assign給x
01/10 16:56, 7F

01/10 16:57, , 8F
return的意思是 callbyvalue(x) 這個expression值是return
01/10 16:57, 8F

01/10 16:57, , 9F
的值,不會動到傳進去的參數x
01/10 16:57, 9F

01/10 16:58, , 10F
你應該先搞清楚function、return是在做什麼
01/10 16:58, 10F

01/10 17:00, , 11F
想想如果沒有x,你是用callbyvalue(5),那5會變成6?
01/10 17:00, 11F

01/11 04:01, , 12F
如果要探討"傳值/傳址"的話~應該要去官網看一下...
01/11 04:01, 12F

01/11 04:02, , 13F
01/11 04:02, 13F

01/11 08:11, , 14F
若您x想變6 必須 x=callbyvalue(x); x才會是return的值
01/11 08:11, 14F

01/13 18:50, , 15F
謝謝各位!
01/13 18:50, 15F
文章代碼(AID): #1KiBb0yj (C_Sharp)
文章代碼(AID): #1KiBb0yj (C_Sharp)