ABAP 数据引用(类似C语言指针的解释)

ABAP 数据引用

TYPE REF TO data 数据引用data references

TYPE REF TO object 对象引用object references “object不能直接跟在TYPE后面,只能跟在TYPE REF TO后面

TYPE REF TO 后面可接的通用类型只能data(数据引用)或者是object(对象引用)通用类型,其他通用类型不行

TYPES: BEGIN OF t_struct,
         col1 TYPE i,
         col2 TYPE i,
       END OF t_struct. "定义一个结构体类型作为参考"
DATA: LS_STRUCT TYPE T_STRUCT. "定义一个结构体变量做参考"
       
DATA: dref TYPE REF TO DATA .   "dref即为数据引用,即数据指针,指向某个变量或常量,存储变量地址     用DATA 作为参考就是暂时不指定类型
DATA: ref TYPE REF TO t_struct ."ref以结构体作为参考
FILED-SYMBOLS <FS> TYPE ANY.    "参考任意类型"
FILED-SYMBOLS <FS> TYPE t_struct . 

1.数据引用 Data References

  • Type Ref To 有两种初始化的方法: 必须初始化

    ​ 1:第一种是用 CREATE DATA 动态开辟内存; (类似C语言定义指针会默认分配一个空间也可以用malloc分配一块空间给指针[指针值就是这块空间的首地址] abap指针必须要手动’malloc’ 一下内存空间)

      如果定义 ref 是指定特定的类型或者结构的,那么 CREATE DATA 时 TYPE 可以省略。
    

    ​ 无论定义时 ref 是否有特定的类型或者结构,CREATE DATA 时必须指定特定的类型或者结构,不能是data这种泛型的。

    一般来说为了使用方便,还是应该指定 Field Symbol 或者 Type Ref To 的类型或者结构,以便之后直接使用。

    CREATE DATA dref TYPE C.  "dref由于没有定义类型 所以初始化时必须指定类型 此时的类型可以是随便什么的 没有限制
    CREATE DATA ref .         "ref在定义时就指定了类型 初始化时无需再次指定类型"
    

    ​ 2:第二种是用 GET REFERENCE OF 指向已经存在的内存变量.

    GETREFERENCE OF LS_STRUCT INTO ref. "效果相当于ref指向变量LS_STRUCT
    
  • Field Symbol 的初始化,则只能指向已经存在的内存变量

    FS是已经解引用的指针(类似C语言有指针p,FS就是*p,其本质已经是变量不是地址,而上述TYPE REF TO 得来的引用本质是地址)

    ASSIGN LS_STRUCT TO <FS>         "初始化FS 必须是已有的变量 而不是类型"
    
  • 两者区别

    Type Ref To 和 Field Symbol 在用法上目前发现的主要区别:

    ​ 1) Type Ref To 可以动态开辟内存,在动态内表时,可以等在程序运行时获得结构后再开辟内存,并且赋值给某个 Field Symbol。而光用 Field Symbol 是做不到的,因为 Field Symbol 的初始化需要“挂”在已知结构上。

    ​ 2)Type Ref To 不像 Field Symbol 那样有LOOP AT it_tab ASSIGNING < fs >的写法,ref->不是指向内表数据,而是类似工作区指向某块内存,所以更改数据后需要 modify 到内表,如果不需要数据了要clear*。而 Field Symbol 则不需要考虑 modify 和 clear。

    ​ 3)IF < fs1> = < fs2> 是比较内存里的值,相对应的是IF ref1->* = ref2->*,而不能判断比较 IF ref1 = ref2 。

  • 使用数据引用 包含二级指针使用 【重点理解】

    DATA: ref1 TYPE REF TO t_struct . "定义指针 指定类型"
    DATA: ref2 LIKE REF TO ref1.      "二级指针
    CREATE DATA ref1 .                "初始化 分配新的内存空间"
    CREATE DATA ref2 .
    ref1       "指针 类似指针p"
    ref2       "指针的指针 类似q 本质是&p"
    ref1->*    "解引用 一级指针的使用 类似*p"
    ref2->*    "解引用 二级指针的使用 类似*q 本质是p"
    ref2->*->* "解引用 二级指针的使用 类似**q 本质是*p"
    

如果定义时指定了特定的类型或者结构,那么 Field Symbol 和 Type Ref To 都可以直接使用

如果定义时没有指定类型或者结构,那么 Type Ref To 必须 ASSIGN 到另外一个 Field Symbol 里间接使用

TYPES: BEGIN OF t_struct,
         col1(6) TYPE C,
       END OF t_struct.


DATA: dref TYPE REF TO DATA ."dref即为数据引用,即数据指针,指向某个变量或常量,存储变量地址
DATA: ref TYPE REF TO t_struct .     "定义一个p指针"

CREATE DATA dref TYPE C LENGTH 6.        "使用前必须先指定类型"
FIELD-SYMBOLS <FS> TYPE any.             "泛用型类型
ASSIGN dref->* TO <FS>.      
<FS> = 'abc'.

CREATE DATA ref .             "无需再次指定类型   初始化p指针内存空间"
ref->*-col1 = 'abcd'.         "类似 *p-col1 = xx"          

WRITE:/ <FS>,
        ref->*.
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ABAP数据字典是SAP系统中用于管理和定义数据结构的工具。它提供了一种集中管理和维护数据元素、域、表、视图、数据类型等的方式。下面是ABAP数据字典的一些常见操作: 1. 创建数据元素:数据元素是数据字典中最基本的组成部分,用于定义数据类型和长度等属性。可以使用SE11事务码或者ABAP关键字来创建数据元素。 2. 创建域:域是一组相关的数据元素的集合,用于定义表的字段。可以使用SE11事务码或者ABAP关键字来创建域。 3. 创建表:表是数据字典中的一个重要对象,用于存储和管理数据。可以使用SE11事务码或者ABAP关键字来创建表。在创建表时,需要指定表名、字段、主键等信息。 4. 创建视图:视图是基于一个或多个表的逻辑结构,用于简化数据访问和查询。可以使用SE11事务码或者ABAP关键字来创建视图。 5. 创建数据类型:数据类型用于定义字段的数据类型,如整数、字符、日期等。可以使用SE11事务码或者ABAP关键字来创建数据类型。 6. 创建搜索帮助:搜索帮助用于在输入字段时提供可选值列表,方便用户选择。可以使用SE11事务码或者ABAP关键字来创建搜索帮助。 7. 创建数据元:数据元是对数据字典中的数据元素进行描述的文档。可以使用SE11事务码或者ABAP关键字来创建数据元。 以上是ABAP数据字典的一些基本操作,通过这些操作可以方便地定义和管理系统中的数据结构。如果您有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值