建立索引以获取结构的访问成员。 C编程

假设我有一个结构

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。

我怎样才能做到这一点?

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

您需要转换GET_MEM()返回的错误键入的指针:

 const MEMBERS *some_members = (MEMBERS *) GET_MEM(); unsigned value1 = some_members->mem1; unsigned value2 = *some_members->mem2; 

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

 MEMBERS *X_mem = GET_MEM( ); //function returns address of memvalues unsigned char value1 = X_men->mem1; unsigned char Value2 = *(X_mem->mem2); 

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

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