在C++中的意思是:
指针是指向内存地址的,可以随时指向任何一个内存地址
引用也是指向内存地址的,但相当于这块内存的变量名称,它不能指向空的对象,引用一旦指向一个内存地址就不能改变了。并且引用只是一个指向一个内存的地址,并不能访问该内存的数据。要访问数据需要借用字段符号来完成。
指针的使用需要解除引用,所谓的解除引用就是取得该指针所指对象的值
但是在abap中也会用到指针和引用,abap中的指针就是字段符号,这里可以直接理解为已经解除引用的指针
声明引用变量:data: dref type ref to data.
通过该引用变量
abap中的引用是指向某个对象内存地址的,要操作该对象时必须要借用字段符号来解引用,意思就是获取该引用的对象值赋给字段符号,
引用变量的创建:data:dref type ref to data.
利用引用创建动态数据对象:create data dref type/like obj "obj是一个类型,创建动态数据对象的时候这一项必须要的。这类型还可以动态指定比如:
create data dref type(name). 这里的变量name中包含的具体类型比如是“C”
引用变量可以互相赋值,就是目标对象和源引用变量指向相同的数据对象,但不能将对象引用或非引用对象的值传递给引用变量
例子:
TYPES:BEGIN OF t_struct, “定义一个结构类型 col1 TYPE i, col2 TYPE i, END OF t_struct. DATA:dref1 TYPE REF TO data, "定义两个引用变量 dref2 TYPE REF TO data. FIELD-SYMBOLS:TYPE t_struct, "定义类型为t_struct的字段符号 TYPE i. "定义类型为i的字段符号 CREATE DATA dref1 TYPE t_struct. ”利用引用变量创建一个动态数据对象,该数据对象是t_struct类型,而且改数据对像是没有名字的,只能通过引用寻址 ASSIGN dref1->* to . "解除引用 并把该引用的对象数值值赋给字段符号 -col1 = 1. "给字段符号赋值 -col2 = 2. dref2 = dref1. "引用变量互相赋值,使得dref2也指向该动态数据对象 ASSIGN dref2->* to CASTING. "解除引用并赋值给字段符号 并且隐式强制转换 WRITE / . get REFERENCE OF -col2 INTO dref2. “获取字段符号 -col2所指的引用动态数据对象的内存地址并赋值给引用变量dref2 ASSIGN dref2->* to . "解除引用并赋值给 WRITE / .
还有一例子如下代码如下:
TYPES: BEGIN OF T_STRUCT, COL1 TYPE I, COL2 TYPE I, END OF T_STRUCT.DATA: DREF1 TYPE REF TO DATA, DREF2 TYPE REF TO DATA, DREF3 TYPE REF TO DATA.FIELD-SYMBOLS:TYPE T_STRUCT, TYPE I, TYPE T_STRUCT, TYPE T_STRUCT, TYPE T_STRUCT, TYPE T_STRUCT.CREATE DATA DREF1 TYPE T_STRUCT.WRITE '<1> 引用变量给字段符号 赋值输出'.SKIP.IF DREF1 IS BOUND. ASSIGN DREF1->* TO . -COL1 = 1. -COL2 = 2 . WRITE: -COL1, -COL2. SKIP. WRITE '<2> 引用变量给字段符号 赋值输出'. SKIP. ASSIGN DREF1->* TO . WRITE: -COL1, -COL2. SKIP. WRITE ' 引用变量给字段符号赋值结束后,没有释放地址!'. SKIP. WRITE '<3> 引用变量之间是地址赋值,仍然可以输出值'. DREF2 = DREF1. ASSIGN DREF2->* TO . SKIP. WRITE: -COL1, -COL2. SKIP. WRITE '<4> 改变字段符号中字段值,把地址赋给引用变量DREF1后'. SKIP. WRITE ' 引用变量DREF1通过字段符号 可以看到数据改变.'. -COL1 = 8. -COL2 = 9. GET REFERENCE OF INTO DREF1. ASSIGN DREF1->* TO . SKIP. WRITE: -COL1, -COL2. SKIP. WRITE '<5> 引用变量进行强制类型装换,若不加CASTING会输出short down.'. ASSIGN DREF2->* TO CASTING. WRITE / . SKIP. WRITE '<6> 解除字段符号,释放内存以及数据.'. UNASSIGN .* WRITE / . SKIP. WRITE '当输出WRITE / 时会出现short down'. SKIP. WRITE '<7> 解除引用变量,释放内存以及数据.'. CLEAR DREF2. ASSIGN DREF2->* TO . SKIP. WRITE '当输出WRITE / -COL1, -COL2.时会出现short down'.* WRITE:* -COL1,* -COL2.ENDIF.
" GET REFERENCE OF lv_data INTO LR_DATA. 读取变量给动态变量