Как правильно обращаться к элементам структур, объединенных в массивы?
Исходим из того, что переменным в структурах присвоены значения. При компиляции возникает ошибка "request for member ‘base_reg’ in something not a structure or union". Я понимаю, что делаю что-то неправильно с указателями, пробовал разные варианты, но не могу понять как сделать верно. Мой код:
struct element {
char name[15];
uint16_t reg;
uint16_t value;
};
struct {
uint16_t reg;
uint16_t total;
struct element eq[500];
} state_1;
struct {
uint16_t base;
uint16_t total;
struct element eq[200];
} state_2;
size_t * all_state [] = {NULL, &state_1, &state_2};
int main (void) {
fprintf(stdout, "all_state = %i\n",all_state[1]->reg);
}
Как корректно обращаться к элементам в данном случае? Например reg.
Ответы (1 шт):
Для начала - вы хотите передавать в массив указателей на size_t указатели совершенно иного типа, да еще и разных типов одновременно. Такое можно разве что сделав указатели на void, с последующим обязательным (и верным!) приведением типа. Да и сами типы структур state_1 и state_2 у вас безымянны...
Словом, конечно, можно вот так:
struct element {
char name[15];
uint16_t reg;
uint16_t value;
};
struct state_1 {
uint16_t reg;
uint16_t total;
struct element eq[500];
} state_1;
struct state_2 {
uint16_t base;
uint16_t total;
struct element eq[200];
} state_2;
void * all_state [] = {NULL, &state_1, &state_2};
int main (void) {
fprintf(stdout, "all_state = %i\n",((struct state_1 *)all_state[1])->reg);
fprintf(stdout, "all_state = %i\n",((struct state_2 *)all_state[2])->eq[10].reg);
}
Но получается что-то сверхсложное, так что скорее всего, неверное (в смысле самогО решения, а не конкретного кода).