BTW, the expression "@DynamicArray" should really return the address of the 
first element, not the address of the pointer to the array structure.
What's wrong with the current solution?
"the first element" = DynamicArray[0]
"address of the first element" -> @DynamicArray[0]

You only find this solution if you already know that "DynamicArray" is a pointer (instead of the array). Otherwise I would always use the identifier "DynamicArray" if I have to feed the array to a procedure or function (or "@DynamicArray" if I have to give the pointer to the array). I never would use the first element. Why should I? This could be even misleading if the index of the first element changes or is unknown from start.

Makes perfect sense :-)

No, it does not because it implies that you already know about the nature of "DynamicArray". It is not transparently useable if you change between dynamic and static arrays (as was claimed here a lot of times).

It somehow destroys the abstraction. And I can't imagine any situation where 
the pointer might be of the interest for the user of the abstraction.
That really doesn't matter. What matters is consistency.

Which does not exist because the identifier "DynamicArray" sometimes means the pointer and sometimes the data it points to.

Pointer to
variable X is defined as address of the first byte of memory where
variable X is stored. If you work with pointers to complex data types,
you have to be aware of internal structure. Otherwise, don't use
pointers - they are evil anyway :-)

Yes, but you cannot avoid it, if you work with dynamic arrays. You are not even told that it's a pointer. That's just the problem.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to