合肥融侨悦城 商业:二级VB题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 01:26:05
在窗体上画一个名称为Command1的命令按钮,再画两个名称分别为Label1、Label2的标签,然后编写如下程序代码:
? Private X As Integer
Private Sub Command1_Click()
X = 5: Y = 3
Call proc(X, Y)
Label1.Caption = X
Label2.Caption = Y
End Sub
Private Sub proc(ByVal a As Integer,ByVal b As Integer)
X=a*a
Y=b+b
End Sub
程序运行后,单击命令按钮,则两个标签中显示的内容分别是( B )。
A)5和3 B)25和3
C)25和6 D)5和6
能详细点解答一下吗!谢了!

首先请大家明白:全局变量当前窗体内任何地方(方法,函数,事件)都可以操作。局部变量只有在局部范围(函数体,方法,事件)内操作其值,局部范围以外不能操作其值。

Private X As Integer
因为X不是在局部范围(函数体,方法,事件)内定义的所以是全局变量,不要因为他是PRIVATE的就混淆了概念,定义为全局PRIVATE类型的只是不能被其他窗体调用而已。当前窗体调用是没有问题的。

Y因为在COMMAND1_Click事件中定义的是局部变量,所以只在Command1_Click中有效。下面PROC函数中虽然也有Y但是和Command1_Click事件中并不是在相同作用域中其实不是同一个变量。所以X=a*a
对全局变量X有效5*5=25。
Y=B+B
PROC函数中的Y变量值改变,但是Command1_Click()事件中的Y并不发生变化(不是同一个变量作用域不同)。所以Command1_Click()事件中Y还是等于3。所以X=25,Y=3选答案B.

不知道这样讲楼主清楚没~!

主要原因是变量的存在范围的问题。

因为变量“X”已经定义,它存在于整个“模块”。在Command1_Click中,它被赋值为5,在过程proc中,它编程a*a,等于调用的X的平方是25;

“y”没有被模块定义,它只存在于被单独生命的各个过程:在Command1_Click中,它被赋值为3;在proc中,它被复制为3+3,等于6;然后顺序回到Command1_Click,它继续被输出为原来的3。

因为子过成的是传值所以输出来的还是5和3