VB中变量作用域问题?
DimyAsIntegerPrivateSubCommand1_Click()DimxAsIntegerx=1y=1Callaa(y+1)z=bb(x)Printx,y,...
Dim y As Integer
Private Sub Command1_Click()
Dim x As Integer
x = 1
y = 1
Call aa(y + 1)
z = bb(x)
Print x, y, z
End Sub
Private Sub aa(ByVal z As Integer)
y = z + x
z = x + y
End Sub
Private Function bb(ByRef y As Integer)
y = y + 1
bb = x + y
End Function 展开
Private Sub Command1_Click()
Dim x As Integer
x = 1
y = 1
Call aa(y + 1)
z = bb(x)
Print x, y, z
End Sub
Private Sub aa(ByVal z As Integer)
y = z + x
z = x + y
End Sub
Private Function bb(ByRef y As Integer)
y = y + 1
bb = x + y
End Function 展开
展开全部
在最前面定义的Y 为公有变量,在所有过程都可以使用,
但是你这代码自定义函数 BB的参数也是Y,所有在这个函数过程里面这个公有变量被屏蔽掉,是不起作用的,也就是调用这个函数的时候传递进来的参数是多少,这个Y就是多少。z = bb(x) 其中 X=1,所以在BB这个过程里面,Y是等于1的,跳出过程后,公有变量Y起作用,还是原来的2。
因为BB函数使用了ByRef 传地的方式传递参数,所以BB过程中,Y参数最后的值就是Z的值。
但是你这代码自定义函数 BB的参数也是Y,所有在这个函数过程里面这个公有变量被屏蔽掉,是不起作用的,也就是调用这个函数的时候传递进来的参数是多少,这个Y就是多少。z = bb(x) 其中 X=1,所以在BB这个过程里面,Y是等于1的,跳出过程后,公有变量Y起作用,还是原来的2。
因为BB函数使用了ByRef 传地的方式传递参数,所以BB过程中,Y参数最后的值就是Z的值。
追问
变量Y时全局变量,我能明白,关键的是X的变化,在主程序中定义的X值,是否带到过程aa中呢?
追答
Private Sub aa(ByVal z As Integer)
ByVal 表示以传值的方式传递参数。这种方式在函数内部改变参数值不会对变量有影响。也就是相当于 z=x 赋值一样,赋值后 你z怎么变化跟我 x 是没有联系的。
Private Function bb(ByRef y As Integer)
ByRef 表示传地的方式传递参数。以这种方式传递的参数,在函数内部改变参数Y的时候,这个变量也将被改变。
z = bb(x) 这样调用,你就把 BB函数里面的Y当成X就可以了,Y怎么变X就怎么变。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询