相同功能我想在C两种结构,不同的结构例如同场:获得从通过在C
答:
typedef struct a
{
char *text;
int something;
}A;
和B:
typedef struct b
{
char *text;
float something_else;
}B;
现在,据我所知,不可能有一个函数需要void *
参数从两个结构中获取text
元素。我错了吗,标准C中可能吗?
相同功能我想在C两种结构,不同的结构例如同场:获得从通过在C
答:
typedef struct a
{
char *text;
int something;
}A;
和B:
typedef struct b
{
char *text;
float something_else;
}B;
现在,据我所知,不可能有一个函数需要void *
参数从两个结构中获取text
元素。我错了吗,标准C中可能吗?
是的,你可以使用铸件和事实text
元素是这两种结构的第一个元素:薪火结构的地址意味着它指向的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;
}
注意。然后,必须再次解除引用,才能获得文本本身的地址,然后将其传递给printf。
编辑:在f
的调用中转换为(void *)
是没有必要的(转换删除)。
这看起来不错,但是如果我有多个'char *'元素,或者它不是第一个元素,这也是可能的吗? – mame98
如果它不是第一个元素,那么这将不起作用。看看工会。 –
我不明白你的问题。你想做什么? [解释你试图解决什么问题,而不是告诉我们你正在试图解决它的机制。](http://meta.stackexchange.com/questions/66377/what-is-the-xy -problem)或者,提供更详细的示例,包括您尝试使用void *参数提取文本元素的函数。手头上,我想说你需要一个'工会',但如果我不能完全理解你的问题,这可能是一个坏建议。 –
好吧,所以我说我有两种结构,A型和B型之一。现在我想通过两个函数: 'void func(void * data)'现在我想要得到两个结构的文本输入。这可能吗? – mame98