2016-03-20 9 views
0

で同じ機能を使用して、異なる構造から同じフィールドを取得します。私は例えば、Cで二つの構造を持つようにしたいC

A:

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

とB:

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

今のところ、私が知る限り、void *パラメータを取って、両方の構造からtext要素を得ることはできません。私は間違っていますか?これは標準Cで可能ですか?

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; 
} 

注:構造体のアドレスを渡すと、それはtextのアドレスを指す意味鋳造とtext要素は、両方の構造の最初の要素であるという事実を使用してはいすることができます

+1

私はあなたの質問を理解していません。あなたは何をしようとしているのですか? [あなたが解決しようとしている問題を説明し、それを試して解決するために使用しているメカニズムを教えてください。](http://meta.stackexchange.com/questions/66377/what-is-the-xy -problem)あるいは、void *パラメータを使用してテキスト要素を抽出するために使用しようとしている関数を含む、より詳細な例を提供してください。私はあなたの問題を完全に理解することができない場合、あなたは '労働組合 'が必要だと言っていますが、それは悪いアドバイスかもしれません。 –

+0

私が言ったように、タイプAとタイプBの2つの構造体を持っています。今度は両方の関数を関数に渡したいと思います: 'void func(void * data)'両方の構造のテキスト入力。これは可能ですか? – mame98

答えて

1

、。これは、テキスト自体のアドレスを取得するためにもう一度参照解除されなければなりません。次に、それがprintfに渡されます。

編集:fへのコールでへのキャストは不要です(キャストが削除されました)。

+0

これはうまく見えますが、複数の 'char *'要素を持っている場合、またはこれが最初の要素でない場合にもこれは可能ですか? – mame98

+0

最初の要素でない場合、これは機能しません。組合を見てください。 –

関連する問題