ABAP中也是存在指针的(指针说法可能欠缺,先这样说吧),为了区分和一般变量,指针用两个尖括号括起来(<fs>).指针用FIELD-SYMBOLS定义,然后要使用指针之前得用ASSIGN初始化,赋值。看一个例子,可以debug看。
REPORT ZTEST_POINTER.
DATA: num TYPE i VALUE 12.
FIELD-SYMBOLS: <F1>,
<F2> TYPE I,
<F3> like num.
ASSIGN: num TO <F1>, "assign 类似初始化的意思 如果指针没有经过assign就不能做其他操作。
num TO <F2>,
<F1> TO <F3>.
* num = <F1>.
* num = <F2>.
* <F1> = <F3>.
WRITE: / <F1>,
/ <F2>,
/ <F3>.
<f3> = <f3> + 1.
WRITE: <f3>.
num = num + 12.
WRITE: / <F1>,
/ <F2>,
/ <F3>.
在第6行到第8行运行后,<f1>,<f2>,<f3>都指向了num地址,所以此时它们的值都是12.现在因为它们都指向了同一个地址(NUM),所以它们只有一个变化的话,它们也都一起变化。如<f3> = <f3> +1执行后,num,<f1>,<f2>,<f3>都变为13.再执行完num = num +12,之后num,<f1>,<f2>,<f3>都变为25.
指针还经常用在动态定义内表的时候,
动态定义具有栏位结构的指针类型
DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,
<span style="white-space:pre"> </span>dref TYPE REF TO data.
FIELD-SYMBOLS: <itab> TYPE ANY TABLE.
CREATE DATA dref TYPE TABLE OF (tabname).
ASSIGN dref->* TO <itab>.
如下可定义表的行,其实也就是struct。
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.