| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4157 人关注过本帖
标题:[求助]byVar和byRef是什么意思?
只看楼主 加入收藏
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
[求助]byVar和byRef是什么意思?
byVar和byRef是什么意思?
搜索更多相关主题的帖子: byRef byVar 意思 
2007-07-24 12:52
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
ByVal 传值
ByRef 传址
ByVar在MSDN6里只有1个页面提到,我估计是打错了


code:

Module Module1
Public sVar As Integer

Sub Test1(ByVal sVar As Integer)
Msgbox sVar ' produces 20
sVar=30
Msgbox sVar ' produces 30
End Sub

Sub Test2(ByRef sVar As Integer)
Msgbox sVar ' produces 10
sVar=50
Msgbox sVar ' produces 50
End Sub

Sub Main()
sVar=10
Msgbox sVar ' produces 10
Call Test1(sVar)
Msgbox sVar ' produces 10
Call Test2(sVar)
Msgbox sVar ' produces 50
End Sub
End Module

执行顺序:
先执行Main 内部插入了Test1,然后插入了Test2
2007-07-24 13:00
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 

STFW
http://hi.baidu.com/yidilixing/blog/item/03acd63dac8b2601baa167a0.html

ByVal是把内存数值的拷贝给程序,所以改变的只是拷贝,内存原来的值是不会改变的。
ByRef是把内存地址告诉程序,所以改变的直接就是内存中的数值,VB中默认的参数传递方式是ByRef

ByVal :
表示该参数是按值方式传递的。 你在函数中修改此参数的值不会造成调用这个函数的函数的变量值的改变。
ByRef :
表示该参数按引用方式传递。 在函数中修改此参数的值会造成实参的值发生改变。
例如:
dim I as integer, J as integer
I = 1 : J = 2
call fun(I,J)
Msgbox "I=" & Cstr(i) & " J=" & cstr(J)

Function Fun(byref a, byval b)
a = 5
b = 6
fun = 0 '函数返回值
End Function
将会输出I=5 J=2,即I的值被函数Fun改变了。

2007-07-24 13:03
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 

就算你打错了搜索ByVar和ByRef也是能有结果的

http://bbs.blueidea.com/archiver/tid-1297568.html

ByVal 是按值传递,ByRef 是按址传递,按值传递只是把变量的值传递到过程或函数,如果在过程或函数内改变了参数的值,并不影响该变量;按址传递是把变量的地址传递到过程或函数,当在过程或函数内改变参数的值时,实际是改变了该地址的值,而传入的原始变量的值也是该地址的值,所以该变量的值也会跟着改变。

可以运行一下下面的程序,看看结果你就知道了。

如下:


Dim A As Integer
A = 10
Call AAA A
MsgBox A
A = 10
Call BBB A
MsgBox A

Sub AAA(ByVal V As Integer)
V = 20
End Sub

Sub BBB(ByRef V As Integer)
V = 20
End Sub


2007-07-24 13:04
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
在过程声明时用ByVal关键字指定的参数,在传递时采用值传递方式
过程声明时使用ByRef关键字指定的参数采用地址传递方式

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2007-07-24 14:53
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
感谢楼上各位的热心解答。。。

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-07-24 20:53
jsbinghe
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-6-23
收藏
得分:0 

不明白呀。呵呵,其实是我没仔细看,不知怎么的,看不下去,但是还想学。没办法了。呵呵。


黑天黑地黑政府,黑男黑女黑警察,这个世界太黑了。
2007-07-25 06:47
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
以下是引用jsbinghe在2007-7-25 6:47:12的发言:

不明白呀。呵呵,其实是我没仔细看,不知怎么的,看不下去,但是还想学。没办法了。呵呵。

看下3楼的那个例子就很清除了


生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2007-07-25 08:56
快速回复:[求助]byVar和byRef是什么意思?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020374 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved