首页 > 编程 > ASP > 正文

ByVal和ByRef(编写ASP子程序所用到命令)

2024-05-04 11:02:56
字体:
来源:转载
供稿:网友
ByVal 传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是所传的值。
ByRef 传送参数内存的实际地址给被调用者。也就是说,栈中压入的是实际内容的地址。被调用者可以直接更改该地址中的内容。
ByVal是传递值 源数据不会被修改
你可以把这个值当作自己的局部变量来使用
ByRef是传递地址 , 源数据可能被修改
你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉

实例:
复制代码 代码如下:
sub Add1(ByVal no as int32)
    no=no+100
end sub
sub Add2(ByRef no as int32)
    no=no+100
end sub
private sub button1_click(sender as object,e as eventargs)handles button1.click
    dim a as int32
    a=100
    Add1(a)
    msgbox ("a的值为:" & a)     '显示:a的值为100
    Add2(a)
    msgbox ("a的值为:" & a)     '显示:a的值为200,因为Add2中的参数no为ByRef,即
                                 '按地址传递,因此在Add2中对no进行修改后,将会导致
                                 '源参数a的值也被修改。
End Sub

——————————————————————————————————————
3、ByVal和ByRef
    ByVal传递的参数值,而ByRef传递的参数的地址。在这里,我们不用去区别传指针/传地址/传引用的不同,在VB里,它们根本就是一个东西的三种不同说法,即使VB的文档里也有地方在混用这些术语(但在C++里的确要区分指针和引用)
    初次接触上面的程序二SwapPtr的朋友,一定要搞清在里面的CopyMemory调用中,在什么地方要加ByVal,什么地方不加(不加ByVal就是使用VB缺省的ByRef)
    准确的理解传值和传地址(指针)的区别,是在VB里正确使用指针的基础。
    现在一个最简单的实验来看这个问题,如下面的程序三:
【程序三】:体会ByVal和ByRef 
复制代码 代码如下:
Sub TestCopyMemory()
Dim k As Long
k = 5
Note: CopyMemory ByVal VarPtr(k), 40000, 4
Debug.Print k
End Sub
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表