首先abap里有下面几种数据类型
变量,结构和内表
来看下面的比喻:
变量 = 房间
结构 = 平房(里面有很多房间;是一户人家)
内表 = 楼房(有很多层,每层有很多户人家,每户人家又有很多房间)
而这个指针就相当于一把钥匙,指针指向谁,就拥有了这个变量,结构,内表的使用权限:更新,查找和删除。
指针的特点
1:不占有自己特有的内存空间
2:数据名与属性到执行的时刻才能确定
3:可以指定所有数据对象
4:一旦被分配他就和变量定义没有太大的区别
5:可以明确指定类型,可以指定any类型,也可以不指定类型
定义
下面3种方式
FIELD-SYMBOLS:<XX>.
FIELD-SYMBOLS:<XX> TYPE ANY.
FIELD-SYMBOLS:<XX> TYPE C.
使用
ASSIGN LIT_DATA TO <XX>.
ASSIGN LST_DATA TO <XX>.
ASSIGN LV_DATA TO <XX>.
动态指针
无非就是指针指向的变量是会改变的。指针可是一把万能钥匙,知道你的房间地址(内存地址:变量名)就能打开你的房间。
举例:一个宾馆里有100个房间,S00,S01,S02,S03,S04,S05...S99.现在要统每个房间里入住人数。通常方法就是100个房间挨个判断,
IF S00 == null 100 次判断
END IF
或者case when 100次
使用动态指针。
DO 100 TIME.
LV_CNT = LV_CNT + SY-INDEX " LV_CNT 是N型
LV_ROOMNUM = 'S' && LV_CNT.
ASSIGN COMPONENT LV_ROOMNUM OF LW_ROOMLIST TO <FS>.
IF <FS> IS ASSING AND <FS> IS NOT INITIAL.
APPEND <FS> TO LIT_PNUM. ''放到内表
ENDDO.
LV_ROOMNUM :字段名
LW_ROOMLIST :构造
<FS>:指针
实际上在应用中,上面的例子很有可能是一个ALV的dataChange事件,每一次画面上值的更新都会去判断一次(每一次办理入住之后都会动态的更新 是不是还有空房间)
以上。