The following excerpt demonstrates how to dereference a pointer using the :: (colon-colon) syntax and the DATA...AT syntax. it also demonstrates how subscripting and reference modification is used in such situations:
01 type1 typedef.
03 array1 pic x(5) occurs 3.
03 buff1 pic x(10).
01 n1 type1.
01 p1 pointer type1.
procedure division.
* qualification
move "abcde" to n1::array1(1)
move "abcde" to n1::array1(2)(2:5)
move "abcdef" to buff1 of n1
set p1 to address of n1
* pointer dereferencing
display p1::array1(2)(2:1)
display p1::buff1(3:2)
display p1::data(8:3)
display array1(2)(1:3) at p1
display array1(2) at p1
display buff1(3:2) at p1
display data(8:3) at p1
The following excerpt demonstrates pointer coercion: changing the type of a pointer.
Care must be taken using coercion. If the underlying data is not of the correct type, undefined behavior can occur.
01 type1 typedef.
03 component-1 pic x(10).
03 component-2 pic xxxx comp-5.
01 type2 typedef.
03 component-1 pic x(10).
03 component-2 pic xxxx comp-5.
01 p1 pointer type1.
01 p2 pointer type2.
01 grp1 type1.
01 grp2 type2.
*> The following would produce syntax errors without the AS
set p1 as type2 to address of grp2
set p2 to p1 as type2
move p1 as type2::component-1 to grp1::component-1
move component-1 at p1 as type2 to component-1 of grp1