VB高手来!

Private Sub Command1_Click() Dim a%, B% a = 5: B = 8 Text1 = "调用前:" + "a=" + Str(a) + "b=" + Str(B) + Chr(13) + Chr(10) If Option1.Value Then Label1 = "按地址传递:" Call swap1(a, B) Else Label1 = "按值传递:" Call swap2(a, B) End If Text1 = Text1 + "调用后:" + "a=" + Str(a) + "b=" + Str(B)End SubPrivate Sub swap1(x%, y%) Dim t% Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10) t = x: x = a: y = B Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)End SubPrivate Sub swap2(ByVal x%, ByVal y%) Dim t% Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10) t = x: x = a: y = B Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)End SubPrivate Sub Command2_Click() EndEnd Sub错哪了,为什么显示结果是 0 0
2026年09月25日 14:01
有5个网友回答
网友(1):

Private Sub Command1_Click()
Dim a%, B%
a = 5: B = 8
Text1 = "调用前:" + "a=" + Str(a) + "b=" + Str(B) + Chr(13) + Chr(10)
If Option1.Value Then
Label1 = "按地址传递:"
Call swap1(a, B)
Else
Label1 = "按值传递:"
Call swap2(a, B)
End If
Text1 = Text1 + "调用后:" + "a=" + Str(a) + "b=" + Str(B)
End Sub
Private Sub swap1(x%, y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)
End Sub
Private Sub swap2(ByVal x%, ByVal y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)
End Sub

网友(2):

swap1和 swap2中的t = x: x = a: y = B应该改为t=x:x=y:y=t,
a和B是在 Command1_Click() 定义的这句Call swap1(a, B)已经把值传给了 swap1或 swap2中的x,y了,像你这样在swap1或 swap2用a,b会被认为是在swap1或 swap2中重新定义的变量,默认值是0!
swap1或 swap2改为:
Private Sub swap1(x%, y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)
End Sub
Private Sub swap2(ByVal x%, ByVal y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y)
End Sub

网友(3):

Private Sub Command1_Click()
Dim a%, B%
a = 5: B = 8
Text1 = "调用前:" + "a=" + Str(a) + "b=" + Str(B) + Chr(13) + Chr(10)
If Option1.Value Then
Label1 = "按地址传递:"
Call swap1(a, B)
Else
Label1 = "按值传递:"
Call swap2(a, B)
End If
Text1 = Text1 + "调用后:" + "a=" + Str(a) + "b=" + Str(B)
End Sub
Private Sub swap1(ByRef x%, ByRef y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
End Sub
Private Sub swap2(ByVal x%, ByVal y%)
Dim t%
Text2 = "变换前:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
t = x: x = y: y = t
Text2 = Text2 + "变换后:" + "x=" + Str(x) + "y=" + Str(y) + Chr(13) + Chr(10)
End Sub
Private Sub Command2_Click()
End
End Sub

网友(4):

变量定义有问题,你这样定义的话a,b只在Command1_Click中有效
修改:
Private Sub Command1_Click()
Dim a%, B%
换个位置即
Dim a%, B%
Private Sub Command1_Click()

网友(5):

由于Private Sub Command1_Click() 定义a = 5: B = 8 是私有的,所以在swap1(a, B), swap2(a, B)的过程中,x = a: y = B,变量a,B都没有定义,默认值为0。故显示结果是 0 0。