表达式必须是可修改的左值

时间:2014-09-10 16:45:49

标签: array-address

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

2 个答案:

答案 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]是该数组的最后一个元素。