假设我有这个struct(顺便说一句包含位域,但您不在乎):

struct Element {
    unsigned int a1 : 1;
    unsigned int a2 : 1;
    ...
    unsigned int an : 1;
};

我想以一种方便的方式访问第i个成员(member)。让我们研究一个检索解决方案。
我想出了这个功能:
int getval(struct Element *ep, int n)
{
    int val;
    switch(n) {
         case 1: val = ep->a1; break;
         case 2: val = ep->a2; break;
         ...
         case n: val = ep->an; break;
    }
    return val;
}

但是我怀疑有一个更简单的解决方案。也许像数组访问样式。

我试图做这样的事情:
 #define getval(s,n)   s.a##n

但预计它不起作用。
有更好的解决方案吗?

最佳答案

除非您对结构的基础结构有特定的了解,否则无法在C中实现这种方法。将遇到各种问题,包括

  • 不同大小的成员
  • 包装问题
  • 对齐问题
  • 像位域这样的技巧将是有问题的

  • 最好是为您的结构手动实现一种方法,该方法对结构的内部成员有深​​刻的了解。

    关于c - 如何根据C中的变量整数访问 `struct'的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/887852/

    10-12 07:36
    查看更多