General case
Yes, the pointer to the object-representation of a suboject is also a pointer to a part of the object-representation of the containing complete object.
This can be deduced from:
1.8/1: An object is a region of storage.
3.9/4: The object representation of an object of type T is the sequence of N unsigned char objects taken up by the object of type T, where N equals sizeof(T).
5.3.3/1: The sizeof operator yields the number of bytes in the object representation of its operand.
1.8/2: Objects can contain other objects, called subobjects. A subobject can be a member subobject, a base class subobject,
or an array element. An object that is not a subobject of
any other object is called a complete object.
The fact that an object is a region of storage and that the subobject is contained within the region of storage means that the suboject representation is contained in the object representation.
As explained in this other answer, the pointer to the object representation is in fact the pointer to the object.
Specific case of the array
Yes, the pointer to the object representation of a subobject (i.e. in this case an array element) is a pointer to an element of the object-representation of the containing complete object (i.e. in this case the array).
8.4.3/1: (...) An object of array type contains a contiguously allocated non-empty set of N subobjects of type T. (...)
So by definition:
the elements of the array are contiguously allocated, meaning that there is no empty space between the elements.
the object representation of each element is a sequence of sizeof(T) unsigned chars, and the object representation of the complete array is the resulting N*sizeof(T) unsigned chars.
We can then deduce:
As explained in this other answer, the pointer to the object representation is in fact the pointer to the object.
the address of the k-th element in the array corresponds to the k-th element in the object representation of the array, and is by construction at an offset of k*sizeof(T) unsigned chars of the address of the array representation.
So the last 2 statements of your code are not undefined behavior, as long as you remain within the boundaries of is