2016-03-20 57 views
0

相同功能我想在C两种结构,不同的结构例如同场:获得从通过在C

答:

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

和B:

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

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

+1

我不明白你的问题。你想做什么? [解释你试图解决什么问题,而不是告诉我们你正在试图解决它的机制。](http://meta.stackexchange.com/questions/66377/what-is-the-xy -problem)或者,提供更详细的示例,包括您尝试使用void *参数提取文本元素的函数。手头上,我想说你需要一个'工会',但如果我不能完全理解你的问题,这可能是一个坏建议。 –

+0

好吧,所以我说我有两种结构,A型和B型之一。现在我想通过两个函数: 'void func(void * data)'现在我想要得到两个结构的文本输入。这可能吗? – mame98

回答

1

是的,你可以使用铸件和事实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 *)是没有必要的(转换删除)。

+0

这看起来不错,但是如果我有多个'char *'元素,或者它不是第一个元素,这也是可能的吗? – mame98

+0

如果它不是第一个元素,那么这将不起作用。看看工会。 –