相同功能我想在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