请教一道VB题:单击命令按钮时,下列程序的执行结果为?

来源:百度知道 编辑:UC知道 时间:2024/05/10 07:21:30
单击命令按钮时,下列程序的执行结果为
Private Sub Command1_Click()

Dim x As Integer, y As Integer
x = 12: y = 32
Call proc(x, y)
Print x; y

End Sub

Public Sub proc(n As Integer, ByVal m As Integer)
n = n Mod 10
m = m Mod 10
End Sub
A.12 32 B.2 32 C.2 3 D.12 3

答案是B,请教详细解答,先谢了
请问为什么选B,谢谢

参数的传递有两种:按值和按地址。按值只改变副本的数值,不会影响原先的值。按地址,则是引用的地址,参数的值最后是运算后的值。

vb默认按地址传递,ByVal指按值传递。即题中的x按地址传递,y按值传递。x=12,n = n Mod 10 :求n除10的余数,12除10,余数为2,n按地址传递,改变了x的值,所以x=2。m = m Mod 10 :求m的余数,32除10,余数也是2,但m按值传递,y的值是不会改变的,y还是32。

还有什么不明白的吗。其实主要是记住两种参数传递的区别就行了。

程序的执行结果为 B

call proc(x,y) 分别把 12,32 带入了 sub proc() 里
sub proc() 做了两个的计算:
1)12 被 10 除的余数 = 2
2)32 被 10 除的余数 = 2

然而传回只有x(n),y(m)没有被传回,因为sub proc()接受y(m)时是以 byval 的方式接收,这意味着32是被抄进proc()里,而非把y(m)这个记忆体整个传过来,因此,在 proc里32这个数字的改变与记忆体y无关。

ByVal为传值的参数修饰,当你把函数外的一个变量,如n传给ByVal的参数时,在函数体内对该参数所做的任何变更,不会影响函数体外的这个n变量的值

Public Sub proc(n As Integer, ByVal m As Integer)
n = n Mod 10
m = m Mod 10
End Sub

ByVal(按值传递)
传值时(ByVal),是先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的
形参的改变不会影响到实参 。
所以:
n As Integer,结果:2
ByVal m As Integer 结果:32(因为并未影响y值)

这里涉及到参数的传递问题:
参数有实参和形参之分,这里实参是x,y,形参是n,m。而参数传递也