2014-09-10 87 views
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的地址在一个结构的末尾。我怎么做?

+0

你不能改变一个变量的地址。 – Barmar 2014-09-10 16:50:13

回答

0

state1_t comp[8];

在此声明comp是阵列8结构的state1_t与阵列是comp不能是可修改的基地址。因此,当您尝试更改地址comp时,可修改的左值错误。

0

您不能更改数组的地址。您应该使用,而不是一个指针:

state1_t *comp; 

然后,你可以这样做:

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

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

相关问题