ABAP中“字段符号”和“引用型变量”的区别?
ABAP中“字段符号”和“引用型变量”的区别?
FROM:http://www.itpub.net/thread-1636074-1-1.html
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: <FS1> TYPE T_STRUCT, *定義兩個字段符號*
               <FS2> TYPE I.
CREATE DATA DREF1 TYPE T_STRUCT.    *利用數據引用,動態創建對象*
ASSIGN DREF1->* TO <FS1>.      *因為數據引用只是地址,不能直接操作使用,需要把它分配給字段符號*
<FS1>-COL1 = 1.   *賦值給組件字段*
<FS1>-COL2 = 2.
DREF2 = DREF1.     *把一個數據引用賦值給另一個數據引用*
ASSIGN DREF2->* TO <FS1>.   *爲了要輸出,需要把數據應用分配給字段符號*
WRITE: / 'DREF2',<FS1>-COL1, <FS1>-COL2.  *可以直接輸出了*
ASSIGN DREF2->* TO <FS2> CASTING.   *把結構變量分配給整形字段符號,因此要進行隱式數據類型轉換*
WRITE / <FS2>.   *輸出<FS2>字段符號變量內容*
GET REFERENCE OF <FS1>-COL2 INTO DREF2.  *取得變量的數據應用,給DREF2*
ASSIGN DREF2->* TO <FS2>.   *分配變量給字段符號<FS2>*
WRITE / <FS2>.     *輸出<fs2>字段符號的內容。
把上面代碼弄懂了的話,應該可以瞭解到80%。
下面分別敘述:
1,字段符號,就是一個指針變量,指向其它變量。可以代替其它變量。因此需要把其它變量分配給它。
1.1 靜態分配,就是把現在已經知道要分配哪個變量給字段符號,分配語法 ASSIGN F  TO <FS>,其中F就是變量名稱。
1.2 動態分配,就是現在不知道要分配的變量名稱,要程序運行時才根據輸入確定,分配語法 ASSIGN (F) TO <FS>,其中F是一個變量,是用變量的內容作為變量的名稱。例如F內容是NAME,那麼就相當于 ASSIGN NAME TO <FS>
2,數據引用,不是指針,是一個地址變量,變量存放的是其它變量的地址。所以不能直接操作變量數據,要把它分配給字段符號。
  有哪些途徑讓數據引用存放對象地址呢?有以下3種。
2.1 自己創建對象,如CREATE DATA DREF1 TYPE T_STRUCT,這時DREF1中就存放了一個T_STRUCT類型變量的內存地址。
2.2 取得已經存在的變量的內存地址,如GET REFERENCE OF <FS1>-COL2 INTO DREF2,這時DREF2中就存放了<FS1>-COL2變量的內存地址。
2.3 另一個數據引用變量直接賦值給它內存地址,如DREF2 = DREF1
3.總結
3.1 數據引用就是用來存放其它變量的地址的或自己創建變量來存地址,但不能直接操作變量數據,需要分配給字段符號。
3.2 字段符號是指針,指向別的變量,可以代替它指向的變量進行操作。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号