You have no choice but to use host side code to allocate the memory and copy the data into that memory, and then device side code (ie. a small kernel) to assign the actual pointer values inside the structure. It will get very unwieldy very quickly, especially if the structure has a lot of depth (like trees or multiply linked lists), but for simple structures of arrays it is manageable.
Thanks very much!
I tried what you said. It seems a feasible plan.
However, I wonder if there is any formal solution without involving global/device function for my pointer initialization? :)