将结构成员NAME传递给C中的函数?

Pep*_*via 4 c struct member

有没有简单的方法将结构成员的名称传递给C中的函数?例如,如果我想要实现这一点:

(我知道代码不正确,我只是写它来解释这个问题)

struct Test
{
    int x;
    int y;
};

int main()
{
    struct Test t;
    t.x = 5;
    t.y = 10;

    example(t, <MEMBER NAME>);
}

void example(struct Test t, <MEMBER NAME>)
{
    printf("%d", t.<MEMBER NAME>);
}
Run Code Online (Sandbox Code Playgroud)

dun*_*can 6

不确定这是否正是您正在寻找的,但这是一个非常接近的解决方案,使用offsetof:

struct Test
{
    int x;
    int y;
};

void example(void *base, size_t offset)
{
    int *adr;
    adr = (int*)((char*)base + offset);
    printf("%d\n", *adr);
}

int main(int argc, char **argv)
{
    struct Test t;

    t.x = 5;
    t.y = 10;

    example(&t, offsetof(struct Test, y));
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,只有GCC(和类似的编译器)允许您对`void*`进行地址算术.C标准不允许这样做.您需要这样做:`int*adr =(int*)((char*)base + offset);`符合标准.如果你用'-pedantic`刺激它,那么GCC将会失败. (2认同)