Seems like there are 2 classes of data you're talking about here:
1) Data that the growth model will never use (well, not in our careers at least). The use of this kind of pointer is keeping all your data
organized at the application level -- an example of this might be log grades.
2) Data the growth model can use -- species codes etc. The use of this kind of pointer is to actually pass data to the growth model from the application that is to be used by the growth model.
For 1), all we need is a large enough storage unit (let's get crazy and make
it 128 bits) -- the application can cast it's native pointer type in and out
For 2), is it really neccessary to make pointers to the data? Maybe we can just make the data variables big enough to hold the longest length we can fantasize, and then some. I doubt if RAM is a constraint for most of us anymore... If we can come up with cases where "variable length" truly can cover a huge range (and are not in class 1 above!), then I'd go with the idea of having a pointer to the data plus an additional variable indicating the length. Hmmm even with fixed length arrays we'd still have to indicate the length of the data in the array.