vb 有关过程的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 16:44:50
假定有以下两个过程:
Sub S1(By Val x As Integer,ByVal y As Integer)
Dim t As Integer
t = x
x = y
y = t
End Sub

Sub S2(x As Integer,y As Integer)
Dim t As Integer
t = x
x = y
y = t
End Sub
为什么过程S1可以实现交换两个变量的值的操作,而S2却不可以?
不是传址(RyRef)才会改变实际参数的值吗?第一个用传值应该不变才对呀~~

没错,S1不可以,S2可以.

"第一个用传值应该不变才对呀~~"
是,的确是第一个不变,不知谁告诉你第一个变.

这里就是Byval的用处啦,Byval是用于值传递,顾名思义,当实参通过一个函数进行相应的运算后,他的值就会发生相应的变化。而S2中没有用到这个Byval,就不行了

我感觉好像反了吧
s1对过程外的调用没有任何影响
s2才实现交换两个变量的值的操作
byval是传值,s1里的x,y是只有在s1过程中才存在的
s2是传地址,s2里的x,y是调用函数传入的变量