Yes
Your explanation is on the right track, although I doubt if the amount of space was the issue, but rather the special case of needing to allocate it at all. Normally, every object that C deals with has a value (or values) and an address. So, an actually allocated pointer has itself an address already and it makes sense to have both value and address available, for real pointers.
But an array reference already is an address. For C to make a double-indirect pointer via the & operator would have required allocating space somwhere and this would have represented a huge divergence in philosophy for the simple early dmr C compiler.
Where it would have stored this new pointer is a good question. With the same storage class as the array? What if it was a parameter? It's Pandora's box and the easiest way to resolve it is to define away the operation. If the developer wants an indirect pointer he can always declare one.
Plus, it makes sense for &
to return the address of an array object, because that's consistent with its use elsewhere.
A good way to look at this is to see that objects have values and addresses and the array reference is just a shorthand syntax. Actually requiring &a
would have been a bit pedantic because the reference a
wouldn't have had another interpretation anyway.