* Program :·AddrR
* Description :·%Addr() Example
*
* %Addr()
* Input :·variable, array index, datastructure subfield
* Output :·Address of input variable
*
* Keyword Description
*
* Based :·Variable is based on pointer
* Variable's value will change according to pointer
* location
*==========================================================
*
D Arr1 S 6 Dim(2)
D Arr2 S * Dim(2) Array of pointers
D DS1 DS
D Fld1 5
D Fld2 5
D Var1 S 5 Inz('aaaaa')
D Var2 S 5 Based(Ptr2)
D Var3 S 2 0 Inz(1)
D Ptr S * Pointer
D Ptr2 S * Pointer
C
/Free
// =================================================
// For Variables
// =================================================
Ptr = %Addr(Var1) ; // Ptr --> Var1
Ptr2 = %Addr(Var1) ; // Ptr2 --> Var1
If (Ptr = Ptr2) ;
Dsply 'Ptr = Ptr2' ; // True
EndIf ;
If (Var1 = Var2) ; // same location
Dsply 'Var1 = Var2' ; // True
EndIf ;
// =================================================
// For Arrays
// =================================================
Ptr = %Addr(Arr1(Var3 + 1)) ; // Ptr --> Arr1(2)
// all members of Arr2 will have address of arr1(1)
// Arr2(1) = Arr1(1)'s address
// Arr2(2) = Arr1(1)'s address
Arr2 = %Addr(Arr1) ;
// members of Arr2 will have corresponding member address of Arr1
// Arr2(1) = Arr1(1)'s address
// Arr2(2) = Arr1(2)'s address
Arr2 = %Addr(Arr1(*)) ;
// =================================================
// For Data Structure
// =================================================
Ptr2 = %Addr(Fld1) ; // Ptr2 --> Fld1
Fld1 = 'bbbbb' ;
Dsply Var2 ; // 'bbbbb'
/End-Free
C SetOn LR
* Description :·%Addr() Example
*
* %Addr()
* Input :·variable, array index, datastructure subfield
* Output :·Address of input variable
*
* Keyword Description
*
* Based :·Variable is based on pointer
* Variable's value will change according to pointer
* location
*==========================================================
*
D Arr1 S 6 Dim(2)
D Arr2 S * Dim(2) Array of pointers
D DS1 DS
D Fld1 5
D Fld2 5
D Var1 S 5 Inz('aaaaa')
D Var2 S 5 Based(Ptr2)
D Var3 S 2 0 Inz(1)
D Ptr S * Pointer
D Ptr2 S * Pointer
C
/Free
// =================================================
// For Variables
// =================================================
Ptr = %Addr(Var1) ; // Ptr --> Var1
Ptr2 = %Addr(Var1) ; // Ptr2 --> Var1
If (Ptr = Ptr2) ;
Dsply 'Ptr = Ptr2' ; // True
EndIf ;
If (Var1 = Var2) ; // same location
Dsply 'Var1 = Var2' ; // True
EndIf ;
// =================================================
// For Arrays
// =================================================
Ptr = %Addr(Arr1(Var3 + 1)) ; // Ptr --> Arr1(2)
// all members of Arr2 will have address of arr1(1)
// Arr2(1) = Arr1(1)'s address
// Arr2(2) = Arr1(1)'s address
Arr2 = %Addr(Arr1) ;
// members of Arr2 will have corresponding member address of Arr1
// Arr2(1) = Arr1(1)'s address
// Arr2(2) = Arr1(2)'s address
Arr2 = %Addr(Arr1(*)) ;
// =================================================
// For Data Structure
// =================================================
Ptr2 = %Addr(Fld1) ; // Ptr2 --> Fld1
Fld1 = 'bbbbb' ;
Dsply Var2 ; // 'bbbbb'
/End-Free
C SetOn LR
No comments:
Post a Comment