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);
我得到一个表达式必须是可修改的左值误差。
当我做
时,我得到同样的错误&comp = (state1_t *)(&(heaalth->count) +1);
我该如何解决这个问题? 我希望comp的地址位于一个结构的末尾。我该怎么做?
答案 0 :(得分:0)
state1_t comp[8];
在此声明中,comp
是一个包含8个结构state1_t
的数组,其数组的基地址为comp
,无法修改。因此,当您尝试更改comp
的地址时,可修改的左值错误。
答案 1 :(得分:0)
您无法更改阵列的地址。你应该使用指针代替:
state1_t *comp;
然后你可以这样做:
comp = (state1_t *)(&(avail->state[2]));
您不需要在地址中添加1 - state[2]
已经是结构的结尾,因为state[1]
是该数组的最后一个元素。