关于byval 和byref的问题。

michaelpeng7799 2001-02-05 07:48:00
下面这两段程序结果是一样的??谁能说说Byval和ByRef的区别,写出能说明区别的程序例子来,多谢了。

Dim y As Integer
Private Sub Command1_Click()
y = 6
abc (y)
Debug.Print y
End Sub

Sub abc(ByVal x As Integer)
x = x * 2
Debug.Print x
End Sub

----------------

Dim y As Integer
Private Sub Command1_Click()
y = 6
abc (y)
Debug.Print y
End Sub

Sub abc( x As Integer)
x = x * 2
Debug.Print x
End Sub

...全文
174 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanyx 2001-02-06
  • 打赏
  • 举报
回复
一个是“带去”,一个是“带回”。
如果你想带去参数,返回时保持参数原样,应用。。。。
如果你希望返回时将计算结果用参数带回来,用。。。。
haor 2001-02-06
  • 打赏
  • 举报
回复
老兄!拜托!我也不知道为什么不一样啦!不过我从来不直接用abc(y)这样的写法,除非是用call abc(y),你试试用call abc(y)和abc y的结果一样,就是abc(y)比较奇怪啦!
michaelpeng7799 2001-02-06
  • 打赏
  • 举报
回复
那能说说ABC(Y)T ABC Y 不加扩号怎么不一样呢?我真的不知道呀!!!??
haor 2001-02-05
  • 打赏
  • 举报
回复
当然不一样啦!
michaelpeng7799 2001-02-05
  • 打赏
  • 举报
回复
谢谢"一个好人"。 为什么 abc y 和abc(y)不一样呢??奇怪!!!!?
haor 2001-02-05
  • 打赏
  • 举报
回复
byref传址,byval传值。
VB参数缺省地使用Byref方式。
试试下面这两段程序的区别:
Dim y As Integer
Private Sub Command1_Click()
y = 6
abc y
Debug.Print y
End Sub

Sub abc(ByVal x As Integer)
x = x * 2
Debug.Print x
End Sub

----------------

Dim y As Integer
Private Sub Command1_Click()
y = 6
abc y
Debug.Print y
End Sub

Sub abc( x As Integer)
x = x * 2
Debug.Print x
End Sub
prefix 2001-02-05
  • 打赏
  • 举报
回复
ByRef是按引用传递,ByVal是按值传递。简单的说就是如果按引用传递,接收者实际上是发送者的一个“引用”,只是引用而已,而不是一个复本,所以被传送的内容对于发送者和接收者来说是同一个,因此接收者对内容的更改就等于发送者所发送的内容实际上被更改;按值传递会在内存上建立一个独立于被传送内容的与被传送内容相同的单元,对被传送后的内容更改,是对新的单元更改,原内容不会被影响到。
mwenyuan 2001-02-05
  • 打赏
  • 举报
回复
Dim y As Integer
Private Sub Command1_Click()
y = 6
abc (y)
Debug.Print y
End Sub

Sub abc( ByRef x As Integer)
x = x * 2
Debug.Print x
End Sub

====RESULT====
x=1

2
2
gameboy999 2001-02-05
  • 打赏
  • 举报
回复
我记得有个东西印象很深:
如:
dim tmpname as string
如果用byref去传的话,则会将string这一个结构类型都传过去了。。。
如果用byval去传的话,则只将string类中的字串作为c形式的字符数组传过去

所以api的宣称当中,如果需要传递字符串的地方,就得用byval而不能用byref

byref常用于整体传递用type定义的类(结构体)。

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧