For situations in which there are no circular references, cell arrays are the closest to pointers. Because that's pretty much what they are, arrays of pointers to items, where (as usual in MATLAB) items have information about data type and array sizes. (Every item in MATLAB has that. Even literal constants are converted to that form.)
If you want efficiency of representation then arrays and index values are the way to go because that only requires the MATLAB-level type and size information once. But it might require that you keep information on the size yourself, and as you dynamically create and delete objects you need to do all of the management yourself, finding space in the array, marking space as free, and so on. Due to those overheads and the possibility of getting them wrong, it is not usually a wise use of programmers time to deal with those for dynamic structures -- though it might be worth it for cases where the information is built only once and used many times. Even then, in these days where memory is cheap compared to people, I would only consider doing it myself for... ummmm, actually for situations where I would not be using MATLAB at all (unless perhaps using it to generate C/C++ code that was then to be hand-tuned.)