Does the C standard require that the size of an array of n elements be n times the size of an element, either by explicit statement or by rigorous logical
The only text describing the representation of arrays is quite terse, and is in what you found at 6.2.5 ¶20:
Any number of derived types can be constructed from the object and function types, as follows:
- An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type. The element type shall be complete whenever the array type is specified. Array types are characterized by their element type and by the number of elements in the array. An array type is said to be derived from its element type, and if its element type is T , the array type is sometimes called ''array of T ''. The construction of an array type from an element type is called ''array type derivation''.
Note that it does not say something like "contiguously allocated nonempty set of objects and padding", so the array is just the objects. Thus there seems to be no basis for a claim that sizeof the array [type] could yield any result other than the size of the contiguous set of objects, which is obviously N times the size of the individual element type.
It's also worth noting that padding is not something that can just exist on its own because it's not specified not to exist. C specifies representations of types (6.2.6) and explicitly specifies the possibility of padding bits and bytes where appropriate. There is no text about padding for arrays, and thus it's not part of their representation.