前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >过程(四)传地址和传值

过程(四)传地址和传值

作者头像
无言之月
发布2019-10-13 16:17:22
4.7K0
发布2019-10-13 16:17:22
举报

上节介绍了过程的传递参数部分内容,即实参与形参的结合。

在VBA中实参可以通过两种方式将数据传递给形参,分别为传地址和传值,都是在创建通用过程定义变量时。

由于概念生硬不易理解,还是先说示例,再总结介绍。

一、 传 地 址

传地址是VBA默认的数据传递方式,在定义过程时,如果形参前面有关键字ByRef或者省略,则该参数通过传地址的方式传递。下面先看示例:

首先在模块中创建jisuan过程,ByRef a As Integer为按地址将实参传递给形参。

创建diaoyong过程,先定义了整型变量b,给b赋初始值为2。然后调用jisuan过程,将变量b作为实参按地址传递给变量a,进行计算a=a+1。此时再在立即窗口中显示变量b,就会发现它已经经过计算变成了3。

这是因为在调用过程时,将变量b做实参按地址传递给变量a,变量b和变量a指向同一个内存单元,一起变化。

注 意 点

1、前面说过sub过程通常不能返回运算结果的,如果需要返回值时,是可以利用ByRef方式来定义形参,这样就可以将子过程的运算数据返回调用程序中。

2、当形参定义为ByRef形式时,只有当实参为一个变量时,才能按地址方式传递参数,如果实参是一个表达式或者常量,则不能按传地址方式传递。

二、 传 值

传值是将实参的值作为一个副本,赋值给形参。定义过程中,在形参面前添加ByVal关键字,则该参数就按传值方式传递。

将上面示例中传地址的方式改成传值方式再运行一次,对比下结果。

在jisuan过程,ByVal a As Integer为按值将实参传递给形参。

在diaoyong过程,先定义了整型变量b,给b赋初始值为2。然后调用jisuan过程,将变量b作为实参按值给变量a,进行计算a=a+1。此时再在立即窗口中显示变量b,b的值仍为2。

所以使用传值方式传递参数时,传递的只是变量的副本,类似于一次赋值操作,改变只是在jisuan过程中,而再调用过程diaoyong中变量的值没有改变。

传地址与传值对比

两种方式,在程序中使用传地址方式比传值方式效率高,但是传地址方式中,有可能对程序产生不必要的影响。

为了在实际当中应用,一些原则可供参考:

1,形参如果是数组、自定义变量、对象变量,则只能用传址方式

2,形参前用了Byval,或者对应参数是常数、表达式,都是传值方式

3,形参前为Byref,或者没有关键词,都是传址方式。

4,实参为变量,且变量放在括号内,如“(a)”,则为传值。这种情况不多见

“传址”还是“传值”,该怎么选择呢?

1,如果希望通过过程调用,并修改对应实参的数值,用传址

例如:要实现两个变量值的交换,宜用传址

例如:要计算三个数的累加和额函数过程,在定义形参时,宜用传值。因为不希望在函数调用后,这三个参数值有什么改变

2,传址方式的速度快,但增加了过程的相互牵连;也不利于程序调试。而传值则相反

在实际中,可以先用传值方式,等调试后,再改为传址方式

3,用传址方式,要求实参与形参的数据类型完全一致


本节主要介绍过程的参数传递问题,重点是区分传地址和传值两种方式,结合示例去理解。(对于实参是数组的一类,后期介绍完数组的之后会补充。)

下一节将介绍可选参数和可变参数。祝大家学习快乐。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel和Access学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档