Standard does no such thing. not. You made a leap from "array of
dimension n, when it appears in an expression, is __converted__ to a
pointer to an array of the dimension n-1. The opposite is not true,
and standard does not say that. You are misinterpreting that passage.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Yes so if we convert an array to a pointer , the resulting pointer is a
pointer to an (n-1) dim array.
So now we have a pointer to the array, the pointer-type just happens tobe
type pointer to (n-1) dim array.
The pointer-type says what the pointer __is__. When dereferenced, it
will give you a reference to the first element of the array. When
incremented, it will give you next element of the array. When indexed,
it will index inside the array. It __never__ points to the array, only
to it's elements, first or otherwise.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
From the C standard this is the definition of a ponter-type:
"A pointer type describes an object whose value provides a reference to an
entity of the referenced type."
This is only part of the definiton, the whole definition is publicly
available in the C standard, and I am not trying to hide anything I am
quoting the part I think is releveant.
The value of a pointer provides a reference to an entity, of the referenced
type.
For a pointer to reference and array of T's, it must be type T*. T is the
referenced type not T[Size].
A pointer to T[Size], such as T (*p)[Size], does not reference the array,it
referneces an array-type, which is a different object than the array. It is,
under the hood, another pointer object, it does not reference THE ARRAY of
T's, it references a different array-type object.