Consider the following struct:
struct Vector4D { union { double components[4]; struct { double x, y, z, t; } Endpoint; }; };
Padding bytes will not cause an issue as all variables are of type double. The compiler will treat Vector4D as a double array. That means, v.Endpoint.z is essentially the same as v[2].
double
Vector4D
v.Endpoint.z
v[2]