求解一道VB题 5

DimxAsInteger,zAsIntegerSuba()DimyAsIntegerx=x+2:y=y+2:z=x+y+zPrintx;y;zEndSubPrivate... Dim x As Integer, z As Integer
Sub a()
Dim y As Integer
x = x + 2: y = y+2: z = x + y + z
Printx; y; z
End Sub

Private Sub Form_Click()
Dim y As Integer
x = 2: y = 6: z = x + y + z
Call a
Print x; y; z
End Sub
为什么单击窗体后 显示
4 2 14 4 6 14
展开
 我来答
报文露4840
2013-06-21 · TA获得超过428个赞
知道小有建树答主
回答量:503
采纳率:50%
帮助的人:422万
展开全部
因为 你设定的 x 和 z 是全局变量 ,而 y 为局部变量。也就是说 x 和 z变量的作用域是整个这个程序,而y的值在离开定义域后将不能跟随,由此得知 在调用a子程序之前 x=2 y= 6 z= 8
而在调用子程序的时候 x=2+2=4, y= 0+2 =2 , z= 4+2+8 =14
而离开子程序 再回到主程序的时候 y值又恢复到 调用子程序之前 也就是6
所以再打印的时候 就是 x=4,y=6,z=14
明白了吗?
更多追问追答
追问
我就不明白为什么call a 是写在子程序后面的呀 后面直接又Print x; y; z了 y 并没有变6啊
我就不明白为什么call a 是写在子程序后面的呀 后面直接又Print x; y; z了 y 并没有变6啊
拾光1991
2013-06-21 · TA获得超过157个赞
知道答主
回答量:103
采纳率:0%
帮助的人:35.8万
展开全部
你按照他给的程序自己算就好了
首先,单击窗体时,定义了x = 2: y = 6: z = x + y + z,其中z默认初始值是0,所以此时z = 2+6 = 8

接着call a函数,然后定义了y, 于是此时的y 又变成了0,,然后此时的x = x + 2 = 2 + 2 = 4; y = y + 2 = 0 + 2 = 2 ,z = x + y + z = 4 + 2 + 8 = 14 ,然后执行打印命令,打印出x,y,z的值分别是4,2,14。然后再回到Private Sub Form_Click()时间里面来,接着就要执行打印工作,但是这时候注意,此时的y不再是a()函数里面的y了,回到了Private Sub Form_Click()中的y就是原来的y = 6,所以是4,6,14.那么为什么会不一样呢?请注意,定义x,z的时候,是写在了所有函数的外面,就是一个通用的x,z,但是定义在函数内部的y是不一样的,只能在当前函数内部使用,除了这个函数之后就不复存在,这就是为什么要在Sub a()里面也要定义一个y,并不是什么陷阱,而是因为不在Sub a()里面也定义一个y,整个程序就会出错,无法运行,编译软件会提示有未知的变量“y”。可以简单地吧2个y 看成是y1和y2,虽然最后打印出来都是y,但是完全是两个变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szqaly
2013-06-21 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1539万
展开全部
你想问题为什么 第二个不同么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式