Это один из тех Я думаю, что это должно сработать, но лучше проверить вопросов. Он компилируется и отлично работает на моей машине.
Гарантируется ли это тем, что я ожидаю (т. Е. Разрешить мне доступ к первым нескольким элементам массива с гарантией того, что расположение, выравнивание, отступы и т. Д. Структуры совпадают с массивом)?
struct thingStruct
{
int a;
int b;
int c;
};
void f()
{
int thingsArray[5];
struct thingStruct *thingsStruct = (struct thingStruct *)&thingsArray[0];
thingsArray[0] = 100;
thingsArray[1] = 200;
thingsArray[2] = 300;
printf("%d", thingsStruct->a);
printf("%d", thingsStruct->b);
printf("%d", thingsStruct->c);
}
РЕДАКТИРОВАТЬ: С какой стати я хотел бы сделать что-то вроде этого? У меня есть массив, который я отображаю в файл. Я рассматриваю первую часть массива как «заголовок», в котором хранится различная информация о массиве, а остальную часть я рассматриваю как обычный массив. Если я укажу структуру на начало массива, я получу доступ к частям данных заголовка как к элементам структуры, что более удобно для чтения. Все члены в структуре будут того же типа, что и массив.