博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针引用的学习
阅读量:6663 次
发布时间:2019-06-25

本文共 2801 字,大约阅读时间需要 9 分钟。

在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 /
.
View Code

 

 

 还有一例子如下代码如下:

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.
View Code

 

"  GET REFERENCE OF lv_data INTO LR_DATA. 读取变量给动态变量

转载于:https://www.cnblogs.com/caizjian/p/3139886.html

你可能感兴趣的文章
Linus 发文宣布Linux Kernel 5.0 正式发布
查看>>
Rust 1.27支持SIMD
查看>>
跳一跳作弊器上榜!GitHub 2018年十大新开源项目揭晓
查看>>
使用Flutter之后,我们的CPU占用率降了50%
查看>>
打造具备互补测试技能的团队
查看>>
Hazelcast加入Eclipse基金会
查看>>
torch中实现自定义层
查看>>
iOS10 新特性适配Label显示不全问题
查看>>
y-a-b-e
查看>>
clang-tidy——静态代码分析框架
查看>>
【译】css动画里的steps()用法详解
查看>>
微信支付 一步一个坑的APP支付!
查看>>
Spring Cloud实战(二)-Spring Cloud Eureka
查看>>
节操,代码,修养,妹子和其他(Go语言版)
查看>>
Sublime Text3配置使用教程整理
查看>>
JAVA 反序列化攻击
查看>>
Magento的三种默认提示信息
查看>>
PHP 性能分析第三篇: 性能调优实战
查看>>
技术团队代码分支管理指南
查看>>
[Lintcode] Longest Increasing Subsequence 最长上升序列
查看>>