在 C 中使用相同的函数从不同的结构中获取相同的字段

Get the same field from different structures using the same function in C

我想在C中有两个结构,例如:

答:

typedef struct a
{
     char *text;
     int something;
}A;

和乙:

typedef struct b
{
     char *text;
     float something_else;
}B;

现在,据我所知,不可能有一个采用 void * 参数的函数从两个结构中获取 text 元素。我错了吗,这在标准 C 中可能吗?

是的,你可以,使用转换和 text 元素是两个结构的第一个元素的事实:

void f(void *t)
{
    printf("%s\n", *((char **)t));
}

int main()
{
     struct a AA = {"hello",3};
     struct b BB = {"world",4.0};

     f(&AA);
     f(&BB);
     return 0;
 }

注意:传递struct的地址就是指向text的地址。然后必须再次取消引用以获取文本本身的地址,然后将其传递给 printf。

编辑:在对 f 的调用中转换为 (void *) 是不必要的(删除了转换)。