关于按值传递和按地址传递

今天遇到一个问题:调用函数的时候,我想要被改变的那个对象(这个对象在调用函数这边叫形参,我想改变它)一直没被改变。究其原因,我自动化形成函数(过程中的函数)的时候,系统默认按值传递参数。虽然我想要被改变的那个对象在过程中的函数(此时为形参)里被改变了,但是调用此函数的部分,也就是(传入的实参)并没有被改变。

代码如下:

 调用部分:

FillContract(drw_Contract, rstc_Contract(int_ContractCnt - 1))
)


我想改变rstc_Contract(int_ContractCnt - 1) 这是一个结构体, 
drw_Contract同样是一个结构体,对于他是否改变我不在意。
过程中的函数:
 Private Sub FillContract(ByVal drw_Contract As DataRow, ByRef ContractDataRow As RFQ.ContractDataRow)
     
            ContractDataRow.chrcontract = drw_Contract("chrcontract")
        
    End Sub


上面的函数是正确的,自动化的函数都是按值传递(默认传递方式),也就

 Private Sub FillContract(drw_Contract As DataRow, ContractDataRow As RFQ.ContractDataRow)
     
            ContractDataRow.chrcontract = drw_Contract("chrcontract")
        
    End Sub


这种rstc_Contract(int_ContractCnt - 1)在调用部分里不变值为NOTHING
网络参考资料如下:
1.定义:
ByVal 与 ByRef(默认值)
这两个是子过程的参数传递时,指定参数按什么传递的
ByVal(按值传递)
ByRef(按地址传递)
2.具体理解方式:
具体这样来理解:
(1)形参:
过程中的参数列表,我们称形参
传值时(ByVal),是先给形参开辟一个临时地址,将实参的内容传入这个临时地址,这样,传递后,形参与实参是在两上不同的地址中,也就是说他们是相互独立的
(2)实参:
调用过程时的参数列表,我们称实参
传址时(ByRef),是直接将实参的地址传递给形参,这样,形参与实参就共用一个地址,所以,形参内容的改变,也直接改变了实参的内容
/************************************************************************/
*归纳:
在调用时,我们要将实参的值传递给形参,这样过程才能拿这些数据参与计算并实现一些功能
那么在传递的过程中,就存在这两种传递方式
通过上面的分析,你只要记得:
按值传递时(ByVal),形参的改变不会影响到实参
按址传递时(ByRef),形参的改变,会影响到实参
/*********************************************************************/
3.范例
应用时,我们可以利用按址传递的过程,给一个子过程(Sub过程)进行参数返回
例:
Dim A as integer,B as integer
A=1
B=2
Call AAA(A,B)
Print A,B '得到的结果是2 3 (形参的改变影响到了实参)
Call BBB(A,B)
Pring A,B '得到的结果跟上面的一样,2 3(形参的改变并没有影响到这个实参)
Sub AAA(I as integer,J as integer) '默认,则按址传递
i=i+1
J=J+1
End Sub
Sub BBB(ByVal I as integer,ByVal J as integer)
i=i+1
J=J+1
End Sub



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值