[VB6 ] 傳值ByVal、傳址ByRef呼叫

看板Visual_Basic作者 (sugar)時間14年前 (2011/04/17 11:34), 編輯推噓4(4013)
留言17則, 4人參與, 最新討論串1/1
請問下面兩題該如何解, 不知道為什麼呼叫第二次我就會算錯! 請辦上各位先進幫忙。 1.VB答案16 Private Sub Form_Activate( ) DIM X as Integer X=3 Call F1(X) Debug.Print(X) End Sub Sub F1( ByRef X As Integer ) Call T2( X=X+X , X , X ) End Sub Sub T2(ByRef A As Integer ,ByVal B As Integer , ByRef C As Integer ) A = A + 1 : B = B + 2 : C = A + B * C End Sub. 請問最後印出? 2.VB 答案15 Private Sub Form_Activate() Dim X As Integer Call S1(2) End Sub Sub S1(ByVal X As Integer) Call S2(X, X, X) Print X End Sub Sub S2(ByRef A As Integer, ByVal B As Integer, ByRef C As Integer) A = A + 1 B = B + 2 C = A + B * C End Sub -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.48.142

04/17 13:31, , 1F
A=1,B=5,C=3,X=X+X是布林值
04/17 13:31, 1F

04/17 13:44, , 2F
補充一下,X=X+X應該是另一個隱藏的變數,因此ByRef 引入
04/17 13:44, 2F

04/17 13:44, , 3F
方式不會去更改到X,而是更改那個隱藏的變數。
04/17 13:44, 3F

04/17 13:48, , 4F
'應該是'後面加上'產生',我發現我語意不清很嚴重..
04/17 13:48, 4F

04/17 15:50, , 5F
X=X+X 是先作加法運算再作比較運算 且不會影響原變數的值
04/17 15:50, 5F

04/17 15:51, , 6F
程式2 S2 的A及C變數都是指向同一個變數
04/17 15:51, 6F

04/17 15:51, , 7F
當A加1後,C的值也同時改變
04/17 15:51, 7F
※ 編輯: minimatsumi 來自: 122.120.42.172 (04/19 19:53)

04/19 19:54, , 8F
請問那為什麼程式1中C的算法是7+3*3=16
04/19 19:54, 8F

04/19 19:55, , 9F
而程式2的C算法是3+4*3=15
04/19 19:55, 9F

04/19 19:56, , 10F
為什麼B一樣是call by value 可是程式1用引入值
04/19 19:56, 10F

04/19 19:56, , 11F
程式2用計算後的值?Y
04/19 19:56, 11F

04/19 22:28, , 12F
程式1是1+5*3=16
04/19 22:28, 12F

04/20 01:02, , 13F
是不是因為X=X+X false(0) 所以T2(0,3,3)謝謝
04/20 01:02, 13F

04/20 09:41, , 14F
在T2和S2的函數中 頭尾加上 print A print B print C 三行
04/20 09:41, 14F

04/20 09:41, , 15F
去觀察每個狀況對ABC的改變 應該就會知道囉
04/20 09:41, 15F

04/20 10:48, , 16F
是呀
04/20 10:48, 16F

04/20 11:55, , 17F
我試過了~謝謝各位版友的說明~謝謝: )
04/20 11:55, 17F
文章代碼(AID): #1Dgb_3JT (Visual_Basic)