繁体   English   中英

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

[英]Indexing to get access members of a structure. C programming

假设我有一个结构

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 ,然后通过 - >运算符访问每个成员。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM