1

假设我有一个结构

typedef struct  
{ 
   unsigned char mem1; 
   unsigned char *mem2
} MEMBERS;

在哪里

 unsigned sample = 12
 MEMBERS memvalues = {  0x15 , &sample  };

当函数“GET_MEM”将结构“MEMBERS”的地址返回给 X_mem 时,我需要访问 mem1 和 mem2 这两个值。我的意思是:

unsigned char *X_mem = GET_MEM ( );    //function returns address of memvalues
unsigned value1 = *X-mem;
unsigned Value2 = *++X_mem;

我希望 value1 给出 0x15,而 value2 给出 12。

我怎样才能使这项工作?

注意:请不要假设上面的代码示例在语法上是正确的。只是为了表达我的意图。谢谢各位。

4

3 回答 3

1

是的,让 GET_MEM() 返回结构的地址。

MEMBERS *X_mem = GET_MEM( );    //function returns address of memvalues
unsigned char value1 = X_men->mem1;
unsigned char Value2 = *(X_mem->mem2);
于 2013-01-31T15:23:54.860 回答
1

除非将 X_mem 声明为指向 MEMBERS 结构的指针,否则您无法让它像这样工作。依赖结构开头的地址偏移量是危险且不可移植的,因为编译器可以自由地在结构中添加任意数量的填充字节,在 mem1 之后的任何位置。因此,明智的解决方案是编写MEMBERS *X_mem然后通过 -> 运算符访问每个成员。

如果您出于某种原因需要编写依赖于这样的偏移量的代码,则需要确保“填充字节模式”符合预期,或者完全禁用填充。

于 2013-01-31T15:24:39.807 回答
1

You need to cast the incorrectly typed pointer returned by GET_MEM():

const MEMBERS *some_members = (MEMBERS *) GET_MEM();
unsigned value1 = some_members->mem1;
unsigned value2 = *some_members->mem2;
于 2013-01-31T15:23:40.900 回答