一道byval和ByRef 传参题目
vb吧
全部回复
仅看楼主
level 2
十班职位 楼主
本人不是学vb的(我是c#),但是最近因为朋友要考vb,跑来问我,所以接触了下vb,遇到了下面这道题目。
在窗体上有一个命令按钮(Command1)和两个文本框(Text1和Text2),编写如下程序,当程序运行后,单击命令按钮,文本框Text2中显示的值是____________________。
Function Cala(x As Ineger,ByVal y AsInteger
x=x+y
Ifx>0 Then
Cala=x
Else
Cala=y
End If
End Function
Private SubCommand1_Click()
Dim m As Integer ,n As Integer
m=18
n=-8
Text1.Text=Cala(m,n)
Text2.Text=Cala(m,n)
End Sub
答案是2.
但是我自己笔算出来是10.
觉得很奇怪,于是我百度了下。
有说到以下情况:
Function Cala(x As Integer, ByVal y As Integer) 'x是按址传递,y是按值传递
x = x + y
If x > 0 Then
Cala = x
Else
Cala = y
End If
End Function
Private Sub Command1_Click()
Dim m As Integer, n As Integer
m = 18
n = -8
Text1.Text = Cala(m, n) 'm执行前为zhi18,执行后m=10,n不变仍然为-8
Text2.Text = Cala(m, n) '执行前m=10,n=-8,执行后,m为2,n为-8,cala返回2
End Sub
-------------------------------------------------
我很好奇,因为我是学c#的,所以m、n这两个值不应该会改变才对。但是上面解释却说是m和n的值以及改变了。
是因为 x的传值默认是 byref,y指明了是byval。
但是,我在vs里面跑出来的结果却是10.和我的想的一样,只有在把x的传值 指明了byref答案才是2.
这和我百度到的大部分答案是相反的,默认的传值是buval而不是byref。
2020年10月16日 11点10分 1
level 2
十班职位 楼主
byref
2020年10月16日 12点10分 2
level 2
十班职位 楼主
byref
2020年10月16日 12点10分 3
level 2
十班职位 楼主
默认
2020年10月16日 12点10分 4
level 15
你这个是VB.net,看来它把规则改了,VB6在没有指定是ByVal还是ByRef的情况下,默认是ByRef的
2020年10月16日 12点10分 5
level 12
vb6 calc函数代码 X传的就是地址,Y传的是值
2020年10月16日 18点10分 7
1