0
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 的地址位于一个结构的末尾。我怎么做?

4

2 回答 2

0

state1_t comp[8];

在这个声明comp中是一个由 8 个结构组成的state1_t数组,该数组的基地址是comp不可修改的。因此,当您尝试更改comp.

于 2014-09-10T16:54:07.497 回答
0

您不能更改数组的地址。您应该改用指针:

state1_t *comp;

然后你可以这样做:

comp = (state1_t *)(&(avail->state[2]));

您不需要将 1 添加到地址 -state[2]已经是结构的结尾,因为state[1]它是该数组的最后一个元素。

于 2014-09-10T16:54:50.273 回答