In a practical sense, yes you can do that and it will work in all the mostly used architectures and compilers.
See “Typical alignment of C structs on x86” section on Wikipedia.
More details:
-
floats are 4 bytes and no padding will be inserted (in practically all cases).
-
also most compilers have the option to specify the packing of structures and you can enforce that no padding is inserted( i.e. #pragma pack from visual studio )
-
arrays are guarantied to be contiguous in memory.
Can you guarantee that it will work in all CPUs in the world with all the compilers? No.. but I would definitely like to see a platform where this fails 🙂
EDIT: adding static_assert(sizeof(A) == 3*sizeof(float)) will make this code not compile if there are padding bytes. So then you’ll be sure it works when it compiles.