2

労働組合について疑問があります。次のように定義された共用体があるとします。

union emp{
    float f;
    int i;
};

ユニオンのどのフィールドが使用されているかを判断する方法はありますか。floatフィールドが使用されている場合はfloatを出力し、intフィールドが使用されている場合はintを出力する必要がある状況に遭遇しました.関数は次のようになります

void print(union u){

    // if float field is initialized
    printf("float field = %f\n",u.f);

    // if int field is initialized
    printf("int field = %d\n",u.i);


}

前もって感謝します。

4

3 に答える 3

6

union;だけではわかりません。通常struct、何らかのタグ値を含む でラップします。

struct val {
  enum { EMP_INT, EMP_FLOAT } tag;
  union emp {
    int i;
    float f;
  } emp;
};
于 2012-04-09T12:38:19.470 に答える
1

実際には、メモリにアクセスするフィールドに応じて、floatまたはのいずれかとして解釈されますint

最良の選択は、ユニオンを構造体の一部にし、どのフィールドが使用されているかを示すフラグを保持することです。

于 2012-04-09T12:39:09.893 に答える
1

できません。情報は実行時にどこにも保存されません。

次のようなことができます:

struct emp {
        enum storedValue type;
        union {
                float f;
                int   i;
        }
};

タイプを手動で保存します。列挙型はfloatval、およびintvalまたは類似のような値を持ちます。

列挙型の代わりに、のようなブール値を使用できますisFloat

于 2012-04-09T12:41:34.990 に答える