分享

函数的形参,实参和传值方式

 L罗乐 2017-04-20

> 深入了解自定义函数

形参和实参

自定义函数中有形参和实参这两种概念,怎么来理解呢?先来看下面的例子

Function GreetUsers(UserName As String) As String    GreetUsers = 'welcome, ' & UserName End Function Sub SayHello()    Debug.Print GreetUsers('A哥') End Sub
  • [x] 在定义函数GreetUser()的定义中,变量UserName是一个形参— 函数完成其工作所需要的一个信息。
  • [x] 在下面代码中:
    Debug.Print GreetUsers('A哥')
    我们向函数传递了一个数据”A哥”,这个值就是一个实参。实参是调用函数传递给函数的信息。

在GreetUser(“A哥”)中,将实参”A哥”传递给了函数GreetUser(),这个值被存储在形参UserName里。

函数里的形参和实参的结合有两种方式:按照地址传值ByRef和按照值传值ByVal

ByRef (默认模式)

通俗点讲就是系统直接把实参的地址传给了形参。由于形参现在和实参共享一个地址,在函数处理过后,实参的数值会相应的变化。
例如:

Function trybydefault(i As Integer) As Integer i = i 1 trybydefault = i End Function Sub test_function() Dim n% n = 2 Debug.Print trybydefault(n) Debug.Print n End Sub

上面返回3,3 也就是函数处理的过程中:
n作为实参被默认按ByRef传值
被函数加1之后,n也发生了改变,因此返回的n值为3

ByVal(传递数值)

如果使用需要特殊指定ByVal
这种方法可以这么理解,函数在接到实参之后,复制了一个副本出来,供函数使用。因此实参的值最终没有变化。

Function trybydefault(byval i As Integer) As Integer i = i 1 trybydefault = i End Function Sub test_function() Dim n% n = 2 Debug.Print trybydefault(n) Debug.Print n End Sub

返回3,2 也就是实参数值并未发生改变。

文章的最后,附上某位小朋友曾经提过的问题,让大家体会一下ByRef和ByVal是多么受出卷老师的喜欢,在这里要手动@野子。。。

总结一下

  • 函数的形参和实参
  • ByVal和ByRef

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多