通过参考
值调用:
在
子程序调用
期间,仅将
实参数的地
址传送给形
式参数。形
式参数本身
没有内存。
在子程序中
使用调用程
序的字段。
更改形式参
数之后,调
用程序中的
字段内容也
会变动。
通过参考值传递
通过值调
用:
在子程
序调用期间
,形式参数
是作为实参
数的副本创
建的。形式
参数有自己
的内存。更
改形式参数
并不影响实
参数。
通过值传递
通过值和
结果调用:
在子程序调
用期间,形
式参数是作
为实参数的
副本创建的
。形式参数
有自己的内
存空间。在
子程序末尾
,将对形式
参数的更改
复制给实参
数。
通过值和结果进行传递
由
TABLES
传递的内表
均通过参考
值调用。
例子:
report SAPMZTST. DATA: NUM1 TYPE I, NUM2 TYPE I, SUM TYPE I, product type i. NUM1 = 2. NUM2 = 4. sum = 0 .product = 0.
PERFORM compute USING NUM1 NUM2 CHANGING SUM product.
WRITE: / '外部sum is', sum, /. WRITE: / '外部 pro is',product, /.
*NUM1 = 2. NUM2 = 4. sum = 0 .product = 0. *PERFORM compute USING NUM1 NUM2 SUM product. *WRITE: / '外部sum is', sum, /. *WRITE: / '外部 pro is', product, /. *NUM1 = 2. NUM2 = 4. sum = 0 .product = 0. *WRITE: / '调用前is', sum, /. *PERFORM compute changing NUM1 NUM2 SUM product. *WRITE: / '外部sum is', sum, /. *WRITE: / '外部 pro is', product, /.
FORM compute USING ADD_NUM1 ADD_NUM2 value(ADD_SUM) changing value(pro). ADD_SUM = ADD_NUM1 + ADD_NUM2. pro = ADD_NUM1 * ADD_NUM2. write : num1 , '+ ',num2. WRITE: / '内部sum is', sum, /. write : num1 , '* ',num2. WRITE: / '内部 pro is', product, /. ENDFORM.
总结:
1.无论对于using 还是 changing 对于传参数来说都是一样的,就是运行时候无论是usings还是changing 都是会改变原始值
2.对于value这种
定义forms时候 using
value()是说明
确保输入
参数在调用
程序中保持
不变(即使
子程序中已
被更改),
可以通过值
将数据传递
给子程序
定义forms时候 CHANGING value()是仅希望 在子程序运 行成功之后 ,才将更改 过的输出参 数从子程序 返回给调用 程序,请使 用 FORM 和 PERFORM 语句
3.在perform时候运用using和changing 和form定义得可以不同。