迅联食材配送软件:有关静态变量的疑问

来源:百度文库 编辑:高校问答 时间:2024/04/28 20:01:54
设有如下通用过程:
Public Function f(x As Integer)
Dim y As Integer
x = 20
y = 2
f = x * y
End Function
在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程:
Private Sub Command1_Click()
Static x As Integer
x = 10
y = 5
y = f(x)
Print x;y
End Sub
程序运行后,如果单击命令按钮,则在窗体上显示的内容是______。
A、10 5

B、20 5

C、20 40

D、10 40

答案是C,我想知道为什么不是D呢?因为x被定义成静态变量,而静态变量在过程退出后仍然可以保持原来的数值而X=10

可以保持值,只是它自己保持而已,和外面能不能访问是两码事。f 函数里的 x 显然指的是 f 的形参 x,而不是 Command1_Click 函数里的局部变量 x。

print x,y 中的x应该是函数f中的x

事实上,即使被定义为静态变量,由于f(x)中的x是传址而非传值,因此Command1_Click中的x已经由10改变为20。
在VB中静态变量并不是指不能改动的变量。只有由Const定义的常量被改变才是非法的。