Выражение должно быть изменяемым lvalue
typedef struct state1_s {
u8 size;
u8 state;
} state1_t;
typedef struct state2_s {
u8 size;
u8 state[2];
} state2_t;
typedef struct state3_s {
u8 code;
u8 count;
}state3_t;
У меня есть эти три структуры. Когда я делаю следующее
state1_t comp[8];
state2_t *avail;
state3_t *health;
&comp = (state1_t *)(&(avail->state[2])+1);
я получаю выражение должно быть изменяемой ошибкой lvalue.
Я получаю ту же ошибку, когда я делаю
&comp = (state1_t *)(&(heaalth->count) +1);
Как это исправить? Я хочу, чтобы адрес comp был в конце одной структуры. Как я могу это сделать?
2 ответа
Вы не можете изменить адрес массива. Вместо этого вы должны использовать указатель:
state1_t *comp;
Тогда вы можете сделать:
comp = (state1_t *)(&(avail->state[2]));
Вам не нужно добавлять 1 к адресу - state[2]
это уже конец структуры, так как state[1]
последний элемент этого массива.
state1_t comp[8];
В этой декларации comp
это массив из 8 структур state1_t
с базовым адресом массива comp
который не может быть изменяемым. Следовательно, изменяемая ошибка lvalue при попытке изменить адрес comp
,