ABAP引數傳遞USING和CHANGIN用法總結

2021-08-09 02:44:59 字數 3697 閱讀 9602

abap中form引數的傳遞有以下幾種方式。

1.引用傳遞(call by reference)

傳遞引數時將引數的位址(address)傳至子程式中,也就是子程式中的引數變數與外部程式的引數變數共享位址內的值。又叫call by address,若子程式中的引數變數的值發生了改變,那麼,外部程式的實際變數的值也發生改變。

[syntax]

form [using ...]  [changing ...]  

perform [using ...]  [changing ...]

using 之後跟隨著不會發生變化的子程式引數,changing後面的引數按引用傳遞,值會隨著子程式內的變化而變化。

[for example]

data: i_num1 type 

i value 10,

i_num2 type 

i value 20,

i_num3 type i.

write: /   'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

perform calculator using i_num1 i_num2 changing i_num3.

write: / 'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

form calculator using num1 num2 changing num3.

num3 = num1 + num2.

write: / 'num1=',num1,

'num2=',num2,

'num3=',num3.

"num1 = num1 + 10.  "不允許修改

"num2 = num2 + 12.  "不允許修改

endform.

程式執行結果如下,i_num3變數在呼叫子程式後值變為了30.

2.值傳遞(call by value)

值傳遞就是將引數的值複製乙份到另乙個至記憶體位址中,所以在子程式中引數變數的值的改變不影響外部程式實際變數的值。

[syntax]

form [using value(f1) value(f2)...]...

perform [using value(f1) value(f2)...]...

value(f1) value(f2)是按值傳遞的call by value

[for example]

data: i_num1 type 

i value 10,

i_num2 type 

i value 20,

i_num3 type i.

write: /   'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

perform calculator_two using i_num1 i_num2 changing i_num3.

write: / 'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

*值傳遞 using value(f1)

form calculator_two using value(num1) value(num2) changing sum.

sum = num1 + num2.

num1 = num1 * num2.

num2 = num1 * num2.

write: / 'num1=',num1,

'num2=',num2,

'sum=',sum.

endform.

程式執行如下圖,子程式內部引數變數的值發生變數,不影響外部程式實際變數的值。

當只按using的方式傳遞引數時其也是按引用的方式傳遞,共享記憶體位址。如下:

data: i_num1 type 

i value 10,

i_num2 type 

i value 

20.write: / 'i_num1=',i_num1 left-justified,

'i_num2=',i_num2 left-justified.

perform calculator using i_num1 i_num2.

write: / 'i_num1=',i_num1 left-justified,

'i_num2=',i_num2 left-justified.

form calculator using num1 num2.

write: / '  num1=',num1 left-justified,

'  num2=',num2 left-justified.

num1 = num1 + 10.  

num2 = num2 + 12.  

endform.

執行結果很明顯,如下圖:

3)值傳遞引數並返回最終值(call by value and return result)

傳遞引數的方式同值傳遞相同,但在子程式結束執行是會將傳入引數變數的最終值回傳乙份給外部程式變數。

[syntax]

form [.....] [changing value(f1)...]

perform [.....] [changing value(f1)...]

changing value(f1)首先按call by value而後return result給外部變數.

[for example]

data: i_num1 type 

i value 10,

i_num2 type 

i value 20,

i_num3 type i.

write: /   'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

perform calculator_three using i_num1 i_num2 changing i_num3.

write: / 'i_num1=',i_num1,

'i_num2=',i_num2,

'i_num3=',i_num3.

form calculator_three using num1 num2 changing value(total).

total = num1 + num2.

write: / 'num1=',num1,

'num2=',num2,

'total=',total,

'i_num3=',i_num3.

"原值沒有發生改變

endform.

程式執行結果如下,i_num3的值在子程式中並沒有發生變數,當子程式呼叫結束後將把相應的值賦予。

ABAP中子程式引數傳遞方式

子程式的引數傳遞大體分為值傳遞和引用傳遞兩種,以及一種較為特殊的值和結果傳遞。using 引用傳遞 改變值 uaing value 值傳遞 不改變值 changing 引用傳遞 改變值 changing value 值傳遞 並返回結果 data int1 type i value 1,int2 ty...

using 指令 和 using 語句 C

using 指令 c 參考 visual studio 2010 using 指令有兩個用途 允許在命名空間中使用型別,這樣,您就不必在該命名空間中限定某個型別的使用 using system.text 為命名空間或型別建立別名。這稱為 using 別名指令 using project pc.myc...

在ABAP 4中引數的傳遞

在abap 4中引數的傳遞可分成 三種,位址傳輸 值傳輸 有返回值的值傳輸 1.call by reference 傳引數時將資料的存放位址 address 傳至引數中,也就是子程式中的引數變數與外部實際 變數共享位址內的值,又稱為 call by address,若在子程式中位址中的值改變了,外部...