Стандарт C ++ говорит, что приведение указателя структуры (pods) к указателю типа его первого элемента даст указатель на его первый элемент:
struct a {
float a1;
float a2;
float a3;
};
a o1; ((float*)&o1); // points to o1.a1
Я подозреваю, что код сказал компилятору не добавлять какие-либо отступы между a1, a2 и a3, так что, если он индексирует указатель, он будет указывать именно на то значение, которое ему нужно. Так что выше
((float*)&o1)[1] // *would* return o1.a2
Это зависит от платформы, так как отступы нельзя изменить в стандарте C ++. Узнайте, как этот код упорядочивает его, и прав ли я вообще:)