vb中的一道题 谢谢解答一下

来源:百度知道 编辑:UC知道 时间:2024/06/19 15:12:02
设有如下通用过程: 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 为什么呢

P_Chou错了,x不是静态变量
静态变量要用Static VarName As VarType定义
x是函数f()的一个参数,但是由于VB的默认传送参数的方式为"传址",所以在函数f()中修改x相当于在Command1_Click()中修改x。

简单介绍传址、传值:

传值
比如一个函数f(ByVal x As Integer)
其中修改了x的值,但不影响调用时候的值
比如:
Function f(ByVal x As Integer)
x=0
f=x
End Function

Sub Foo()
Dim y As Integer, z As Integer
z=10
y=f(z)
Print y,z
End Sub
调用Foo()的输出结果就是
0 10
过程:
调用Foo()
声明y,z都是整型变量
调用f(z)
令x=z的值 (传递参数,传值)
令x=0
结束调用f(z),返回x(就是0)
令y=刚刚的返回结果(也就是0啦)
输出y,z(y是0,z是10,z没有被函数f()改变)
结束调用Foo()

而传址:

Function f1(x As Integer)
x=0
f=x
End Function

Sub Foo1()
Dim y As Integer, z As Integer
z=10
y=f1(z)
Print y,z
End Sub
调用Foo1()的输出结果就是
0 0
过程:
调用Foo1()
声明y,z都是整型变量
调用f1(z)
令x等价于z(传递参数,传址)
令x=0(也就是令z=0)
结束调用f1(z),