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
展开
 我来答
crazy0qwer
2013-03-28 · TA获得超过3300个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1316万
展开全部
在最前面定义的Y 为公有变量,在所有过程都可以使用,
但是你这代码自定义函数 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就怎么变。
wangyuchen9988
2013-03-28 · 超过11用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:24万
展开全部
使用public定义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式