在窗体上画一个命令按钮,其名称为Command1,然后编写如卞程序: Private Sub Command1-Click() Dim a(10) As Integer Dim x As Integer For i=1 To 10

admin2010-03-22  29

问题 在窗体上画一个命令按钮,其名称为Command1,然后编写如卞程序:
   Private Sub Command1-Click()
   Dim a(10) As Integer
   Dim x As Integer
   For i=1 To 10
   a(i)=i
   Next i
   x=1
   MsgBox a(f(x)+x)
   End Sub
   Function f(y As Integer)
   y=y+2
   f=y
   End Function
   程序运行后,单击命令按钮,消息框的输出结果为______。

选项

答案6

解析 本题考查VBA中参数传递的知识。在VBA的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用ByVal声明,说明此参数为传值调用,此时形参的变化不会返回到实参:若用ByRcf声明,说明此参数为传址调用,此时形参的变化将会返回到实参:没有说明传递类型,则默认为传址传递。本题中函数f的形参y没有使用ByVal声明,则默认为传址传递。当求a(f(x)+x)值的时候,先要求出f(x)+x的值。由于x的值为1,那么调用函数f以后得到f(x)的返回值为3,同时由于函数f中改变了形参y的值,在传址传递的前提下这一改变会影响到对应的实参x,故此函数调用结束后x的值变为3,也就是最后输出的应该是a(6)的值也就是 6。举一反三,如果最后输出的不是a(f(x)+x)而是 a(x+fx)),则会先取得x的值1,然后再计算f(x)的值为3,那么最后输出的就不是a(6)的值而是a(4)的值了。
转载请注明原文地址:https://kaotiyun.com/show/w4wp777K
0

最新回复(0)