VB的byval用法

Private Sub Form_Click()
Dim a%, b%
a = 3
b = 8
med a, b
Print a, b

End Sub
Sub med( x%, ByVal y%)
x = 3 * x
y = x + y
End Sub

请教一下
这样一段程序,加上BYVAL后输出的y值是8,不加的话是17,为什么呀~
谢谢大家,再请教一下,既然不会影响变量的值,那这个语句有啥意义呢?

这是vb参数传递的基本知识

不加Byval 默认的是Byref

Byref 是传址,就是把变量的地址传送给函数,在函数的内部对参数的修改,实际上是对变量地址里的数据修改,所以当函数返回的时候,传进来的变量也是跟着改变的

Byval 是传值,顾名思义,就是把变量的数据传给函数,函数内部对其做任何处理都不会影响变量本身的值

举个简单的例子

如果你写一个函数,想让它返回两个或更多值,你就用传址的方式,在函数内部对参数的修改,返回之后,你传进去的变量,不就有新的值了吗(还有其他用法,我在这就不说了)
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-14
ByVal指的是按值传递,程序会将被传递的参数的值拷贝一份存在一个临时区域中参与调用过程的执行,在代码中即使使用诸如a=a+1之类改变参数值的语句,实际只改变了它的副本内容,而并没有真正改变a的内容;

加上BYVAL后,y的值就不会变化,所以一直是8,如果不加,则y的值就会跟着变化为17
第2个回答  2016-01-02
vb 的byval 是用在函数参数调用方式的一种。如果在调用函数是的参数时 前面用上关键字byval 指明 该参数调用方式是传值方式 参与调用的变量在调用函数的过程中不会变。例如:
sub p(x as integer)
x=2
end if

sub main()
dim a asinteger
a=1
call p(a)
print a
end sub

这个时候 输出的 a的值已经变为 2
而下面的例子 用了byval关键字时变量a就不会发生变化。
sub p(byavl x as integer)
x=2
end if

sub main()
dim a asinteger
a=1
call p(a)
print a
end sub
第3个回答  2010-06-14
byval 按值传递
byref 也就是没写时默认值 按地址传递
按地址只要你改变参数中的Y值 如你med过程中的y = x + y 那么你调用时med a, b 的B就会被改变
byval 则不会 因为它只是传递一个数值给过程而已

Y不会改变 但 X会改变A啊。。X没加byval 就默认为byref

题目这么写就是给你做对比用 一个改变一个不改变
第4个回答  2010-06-14
呵呵 答应够齐全的 所以我就不献丑了!
相似回答