One of the expressions shall be a glvalue of type “array of
T” or a prvalue of type “pointer
to
T” and the other shall be a prvalue of unscoped enumeration or integral type
. The result is of type “
T”
. The type “
T” shall be a completely-defined object type
.
The expression
E1[E2] is identical (by definition) to
*((E1)+(E2)),
except that in the case of an array operand, the result is an lvalue
if that operand is an lvalue and an xvalue otherwise
.