vb中byval和byref的区别

如何理解vb中byval和byref的区别?

打个比方:
ByVal 就像是你给别人100块钱,这100块钱给了他之后就基本上跟你没关系了,他怎么使用都不再会影响到你的剩余财产。这就是传值调用,即传递的只是参数的值,函数内部对这个值所进行的任何修改都不会改变该参数调用前的变量值(就好比相同名字的两个人,你打其中一个人的脸,另一个人的脸并不会疼,对吧?)。
而 ByRef 就像是你把自己的银行账号和密码告诉别人,那么别人随时可以从中取钱、存钱、查询余额等,也就是说他的操作可以直接改变你的财产数值。这就是传址调用,即传递的是参数的内存地址,函数内部只要修改了这个地址中的内容,那么参数调用前的变量值也会跟着改变(就好比同一个人有不同的两个名字,那么不管是按哪个名字打脸,疼的都是他对吧?)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-28
BYREF说明白点就是在过程中使用的数值和外面的数值相等了,并且一旦在过程中改变了这个数值,那么引用过程的数值也修改了。一般来说缺省就是BYREF。
优点:节约一个内存地址的大小,并且实现数值的修改

BYVAL指的是为这个变量在内存中重新开辟一个地址进行存储。在过程中修改这个数值不会影响这个数值。

PS下,楼上的有些地方写错了FUNCTION必须有返回值。应当声明成过程。
再PS一下,他的解释也是对的

对他修改一下
(1)ByRef
例如
SUB byr(byref a as integer)'BYREF不写也是对的
a=10
end SUB

然后如果我们这样用
Dim x as integer
b www.hbbz08.com yr x
msgbox x
输出10

(2)ByVal
例如
SUB byv(byval a as integer)
a=10
end SUB
然后再
Dim x as integer
byv x
msgbox x
第2个回答  2016-01-04
byval 调用函数过程中是传值方式 调用后 参与的变量值不会发生改变 byref是传址方式uivb的默认方式,调用函数后变量的值会发生改变追问

能麻烦举个例子吗?

追答

Private Sub Command1_Click()
Dim a As Integer
Dim b As Integer
a = 1
b = 2
Call fun(a, b)

Print a, b
End Sub

Sub fun(ByVal a As Integer, ByRef b As Integer)
a = 10
b = 20
End Sub

这段代码 输出为 1 20
这样懂了吗

懂了吗?可以采纳吗

本回答被提问者采纳
相似回答