一个VB笔试题

来源:百度知道 编辑:UC知道 时间:2024/05/10 20:32:54
Private Sub s(ByVal p As Integer)
p = 2 * p
End Sub

Private Sub command1_click()
Dim i As Integer
i = 3
Call s(i)
If i > 4 Then
i = i ^ 2
End If
MsgBox i
End Sub
为什么最后结果是3,请说明一下解题过程,谢谢!

因为函数s接受的一个函数是值传递的。所以
Call s(i)
这条语句对 i 没有任何影响,i 还是等于 3
所以下面的语句
If i > 4 Then
i = i ^ 2
End If
为假,是不会被执行的, i 的值从被赋于 3 后,一直没有改变过,
所以等于 3

其实就是 传值 和 传址 的问题
打个比方:
传值就像是复制一份传给它,就像我买了VB的光盘,你借去安装,我借你了,你也安装了,——不管你是怎么装的,也不管你是用什么光驱装的。盘还我后,盘里的内容没有改变。

传址就像是我把U盘借你了,——U盘里有你需要的程序。你借去后,把我的程序给移动到你的计算机上了,U盘再还我的时候,U盘里的东西就变了。

byval 和 byref 的区别。

所以只要把过程改一下就可以了
Private Sub s(ByRef p As Integer) '把byval改成byref就可以了
p = 2 * p
End Sub

其实就是 传值 和 传址 的问题
Private Sub s(ByRef p As Integer)
p = 2 * p
End Sub
再试试这个看,你就明白了!