作者minimatsumi (sugar)
看板Visual_Basic
標題[VB6 ] 傳值ByVal、傳址ByRef呼叫
時間Sun Apr 17 11:34:25 2011
請問下面兩題該如何解,
不知道為什麼呼叫第二次我就會算錯!
請辦上各位先進幫忙。
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
1F:→ pinkykk:A=1,B=5,C=3,X=X+X是布林值 04/17 13:31
2F:→ pinkykk:補充一下,X=X+X應該是另一個隱藏的變數,因此ByRef 引入 04/17 13:44
3F:→ pinkykk:方式不會去更改到X,而是更改那個隱藏的變數。 04/17 13:44
4F:→ pinkykk:'應該是'後面加上'產生',我發現我語意不清很嚴重.. 04/17 13:48
5F:推 fumizuki:X=X+X 是先作加法運算再作比較運算 且不會影響原變數的值 04/17 15:50
6F:推 fumizuki:程式2 S2 的A及C變數都是指向同一個變數 04/17 15:51
7F:推 fumizuki:當A加1後,C的值也同時改變 04/17 15:51
※ 編輯: minimatsumi 來自: 122.120.42.172 (04/19 19:53)
8F:→ minimatsumi:請問那為什麼程式1中C的算法是7+3*3=16 04/19 19:54
9F:→ minimatsumi:而程式2的C算法是3+4*3=15 04/19 19:55
10F:→ minimatsumi:為什麼B一樣是call by value 可是程式1用引入值 04/19 19:56
11F:→ minimatsumi:程式2用計算後的值?Y 04/19 19:56
12F:→ pinkykk:程式1是1+5*3=16 04/19 22:28
13F:→ minimatsumi:是不是因為X=X+X false(0) 所以T2(0,3,3)謝謝 04/20 01:02
14F:推 ClubT:在T2和S2的函數中 頭尾加上 print A print B print C 三行 04/20 09:41
15F:→ ClubT:去觀察每個狀況對ABC的改變 應該就會知道囉 04/20 09:41
16F:→ pinkykk:是呀 04/20 10:48
17F:→ minimatsumi:我試過了~謝謝各位版友的說明~謝謝: ) 04/20 11:55