2016-03-20 61 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

如果它不是第一個元素,那麼這將不起作用。看看工會。 –