Usually I work with 3D vectors using following types:
typedef vec3_t float[3];
initializing vectors using smth. like:
vec3_
The safe and recommended way to access the elements is with a union, instead of pointer type punning, which fools the aliasing detection mechanisms of the compiler and may lead to unstable code.
union Vec4 {
v4sf v;
float e[4];
};
Vec4 vec;
vec.v = (v4sf){0.1f,0.2f,0.3f,0.4f};
printf("%f %f %f %f\n", vec.e[0], vec.e[1], vec.e[2], vec.e[3]);