在 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 *)
是不必要的(删除了转换)。
我想在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 *)
是不必要的(删除了转换)。