作者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