Two questions arise for others, because the documentation doesn't say.
- - Does Dyalog's ⎕NA copy an input array before passing to the associated function its pointer (i.e. a pointer to a copy of the user's array)? Faster, but less safe, would be to pass a pointer to the object in the workspace.
- If the APL array that is being passed in is of rank 2 or higher, will ⎕NA accept it as is and point to its first element? Or are you required to ravel it first?
Regarding decoding the header of an APL array in external code: it's easy to discover, but possibly unstable across operating systems and major releases, so I've only done it in the days when auxiliary processors roamed the earth. If read-only pointers to input arrays are efficiently handled, it shouldn't be necessary.