Der C++-Standard besagt, dass das Casting des Zeigers einer (pods)-Struktur auf einen Zeiger vom Typ ihres ersten Elements einen Zeiger auf ihr erstes Element ergibt:
struct a {
float a1;
float a2;
float a3;
};
a o1; ((float*)&o1); // points to o1.a1
Ich vermute, dass der Compiler durch diesen Code angewiesen wurde, keine Füllung zwischen a1, a2 und a3 einzufügen, so dass der Zeiger, wenn er indiziert wird, genau auf den gewünschten Float zeigt. Also oben
((float*)&o1)[1] // *would* return o1.a2
Das ist plattformabhängig, da Padding in Standard-C++ nicht geändert werden kann. Schauen Sie nach, wie der Code es anordnet, und ob ich überhaupt richtig bin :)