On 25/07/2016 02:04, Gregory Ewing wrote:
BartC wrote:
(They don't need to be elaborate to start being confusing. Take 'int
*a[]' and 'int (*a)[]'; one of these is an array of pointers, the
other a pointer to an array. Quite different! But which is which?
Where have you seen 'int (*a)[]' used? I don't think I've
ever seen any real-life C code that used a pointer to an
array, as opposed to a pointer to the first element of the
array.
(Yes everyone uses T*a (pointer to T) instead of T(*a)[] (pointer to
array of T), because, thanks to how C mixes up deferencing and indexing,
the former can be accessed as a[i] instead of (*a)[i].
But it's wrong, and leads to errors that the language can't detect. Such
as when a points to a single element not a block: define ANY combination
such as 'pointer to pointer to array'; you need to access an element
using (deref, deref, index), but C also allows (index, deref, deref) or
(deref, index, deref), or (index, index, index).
Provided the right number of deref/index ops are provided, C can't tell
the difference because derefs and index ops are interchangeable! But
only one combination is correct.
I came across T(*a)[] when translating from a language that handles this
properly, into C. In fact I use the translator to convert type-specs
from straightforward format into C. Another tool to get around a flaw.)
--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list