The ADDRDATA function returns a pointer to the storage referenced by a specified variable x. Its behavior is similar to that of ADDR except when x is a reference to a varying string. In this case ADDRDATA returns the address of the first data byte of the string.
myprog: proc options (main); dcl str char(12) var init ('abcdefgh'); dcl s char (4) based; dcl i fixed bin (15) init (99); dcl fb15 fixed bin (15) based; dcl p ptr; p = addrdata(str); put skip list (addrdata(i)->fb15, addr(str)->fb15, p->s, ptradd(addrdata(str),4)->s); end; Results in: 99 8 abcd efgh