abap 的传值与传引

在abap的FROM 中也有传值与传引的概念。

传值,指将传入的参数的值拷贝一份传入FORM内,FORM内对参数的改变不会造成外部值的改变

传引,指将传入参数的地址传入FORM内 FORM内对参数的改变将造成外部值改变。

1.            Call By Reference:

传参数时将数据的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际

变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实

际变量的值也会跟着改变.

语法:

     FORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]

     PERFORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]

     Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量

     但实际上USING之后的参数在子程序中也可将值改变

     Example:

     SUM = 0.

     NUM1 = 100.  NUM2=200.

     PERFORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.

     WRITE: / NUM1,NUM2,SUM  “ SUM 0 变成 300

     FORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.

        SUM  =  NUM1  +  NUM2.

     ENDFORM.

     执行结果:

                     100   200   300

 

2.            Call By Value

传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影

响外部实际变数的值.

     语法:

          FORM  <subr>  USING  VALUE(<f1>…)

          使用 VALUE(<f1>)表示 <f1> Call By Value的传递

          PERFORM  <subr>  USING  <f1> 

     Example:

     SUM = 0.

     NUM1 = 5.

     PERFORM  MULTI  USING  NUM1  CHANGING  SUM.

     WRITE: / NUM1,SUM  “NUM1值还是5,  SUM 0 变成 120

     FORM  MULTI  USING  VALUE(NUM1)  CHANGING  SUM.

        SUM = 1.

        WHILE  NUM1 > 1

          SUM  =  SUM * NUM1.

          NUM1 = NUM1 – 1.

        ENDWHILE..

     ENDFORM.

     执行结果:

                     5   120

 

3.            Call By Value and Return Result

传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制一份传回给外部实际变数. 执行过程中外部实际参数不变.

  语法:

        FORM  ….. CHANGING  VALUE(<f1>)

        PERFORM  …. CHANGING …. <f1>

        Example:

               SUM = 0.

               NUM1 = 100.  NUM2=200.

               PERFORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.

               WRITE: / NUM1,NUM2,SUM  “ SUM 0 变成 300

               FORM  ADD  USING  NUM1  NUM2  CHANGING  VALUE(S).

                  S  =  NUM1  +  NUM2.

                  WRITE: / NUM1,NUM2,SUM  “得到结果为 100  200  0

               ENDFORM.

     执行结果:

                100    200     0    “在子程序中 SUM值尚未改变

                    100   200   300    “返回程序时, 将变量 S的值复制给 SUM

                                        “所以 SUM值变成 300

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP中,可以通过使用FORM语句和PERFORM语句来到工作区。在FORM语句中,可以使用USING子句来递参数,参数可以是变量或字段。例如,使用FORM ADD USING NUM1 NUM2 CHANGING SUM,可以将NUM1和NUM2的递给ADD子程序,并将SUM作为参数递给ADD子程序进行修改。在ADD子程序中,可以通过在FORM语句中使用CHANGING子句来接收并修改SUM的。执行结果将反映在主程序中。\[3\] 另外,还可以使用PERFORM语句来到工作区。通过使用USING子句和VALUE关键字,可以将参数按递给子程序。例如,使用PERFORM ADD USING VALUE(NUM1)可以将NUM1的递给ADD子程序。在ADD子程序中,可以直接使用递的进行操作,而不会影响主程序中的原始变量。\[3\] 总结起来,ABAP中可以通过FORM语句和PERFORM语句来到工作区,FORM语句可以使用USING子句和CHANGING子句来递和修改参数的,而PERFORM语句可以使用USING子句和VALUE关键字来按递参数的。 #### 用[.reference_title] - *1* *3* [ABAP using与changing超详解 技巧 使用习惯](https://blog.csdn.net/Pegasus666/article/details/116484639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ABAP 内表的定义,与PERFORM的定义](https://blog.csdn.net/lmf496891416/article/details/117702217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值