byref与byval的区别

1 篇文章 0 订阅
首先解释一下什么是实参,什么是形参

过程中的参数列表叫做形参 。

调用过程时的参数列表就实参。

形参与实参的类型必须一致。

调用时将实参的值传递给形参。

Private sub command1_click()

Dim a as long ,dim b as long

     a= 20

     b = 30

    call myfunc(a,b)

     Print a,b

End sub

Private sub myfunc(byref x as long,byref y as long )

      x=x*2

      y =y*2

End sub

上面的 x ,y 就是形参 , 而a,b就是实参

ByVal(按值传递) 传值时先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的

传址时(ByRef),是直接将实参的地址传递给形参,这样,形参与实参就共用一个地址,所以,形参内容的改变,也直接改变了实参的内容

做个比喻,

a,b比喻成两个杯子,分别装30、20升水,我们定义的过程s1,比喻为机器,机器功能是可以使杯子水变成原来的2倍,Call s1(a, b)相当于启动机器,a,x虽然名字不一样,但是在计算机内存里,就是一个东西(因byref),就是装30升水的那个杯子,“加工”后,变成60升;再看b杯子,b没有放入机器加工,而是机器生产出一个和b一样的杯子c,也装20升水(完全模仿b),放入机器加工的是c,c加工完后是40升,但b还是20升;过程s1执行完了,c杯子就消失了(作用域),并没有把其中的水传回给b

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值