Ссылочку бы, совершенно неочевидное свойство
7.2 Array-to-pointer conversion [conv.array]
1 An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of
type “pointer to T”. The temporary materialization conversion (7.4) is applied. The result is a pointer to the
first element of the array.
11.3.4 Arrays
7
[ Note: A consistent rule is followed for multidimensional arrays. If E is an n-dimensional array of rank
i × j × · · · × k, then E appearing in an expression that is subject to the array-to-pointer conversion (7.2)
is converted to a pointer to an (n − 1)-dimensional array with rank j × · · · × k. If the * operator, either
explicitly or implicitly as a result of subscripting, is applied to this pointer, the result is the pointed-to
(n − 1)-dimensional array, which itself is immediately converted into a pointer. [ Example: Consider
int x[3][5];
Here x is a 3 × 5 array of integers. When x appears in an expression, it is converted to a pointer to (the first
of three) five-membered arrays of integers. In the expression x[i] which is equivalent to *(x+i), x is first
converted to a pointer as described; then x+i is converted to the type of x, which involves multiplying i by
the length of the object to which the pointer points, namely five integer objects. The results are added and
indirection applied to yield an array (of five integers), which in turn is converted to a pointer to the first of
the integers. If there is another subscript the same argument applies again; this time the result is an integer.
— end example ] — end note ]
С++17 2017-03-21 Revises: N4640