1. ホーム
  2. c

[解決済み] 混合データ型(int, float, charなど)を配列に格納する方法は?

2022-05-01 14:26:32

質問

データ型が混在しているものを配列に格納したい。どうしてそんなことができるのだろう。

どのように解決するのですか?

配列の要素を判別可能なユニオンにすることで、別名 タグ付け組合 .

struct {
    enum { is_int, is_float, is_char } type;
    union {
        int ival;
        float fval;
        char cval;
    } val;
} my_array[10];

があります。 type のどのメンバを選択するかを保持するために使用されます。 union は配列の各要素に対して使用する必要があります.ですから,もし int を最初の要素に入れるとします。

my_array[0].type = is_int;
my_array[0].val.ival = 3;

配列の要素にアクセスする場合は、まず型を確認し、対応するユニオンのメンバを使用する必要があります。A switch 文が便利です。

switch (my_array[n].type) {
case is_int:
    // Do stuff for integer, using my_array[n].ival
    break;
case is_float:
    // Do stuff for float, using my_array[n].fval
    break;
case is_char:
    // Do stuff for char, using my_array[n].cvar
    break;
default:
    // Report an error, this shouldn't happen
}

を確保するのはプログラマーに任されている。 type に格納された最後の値に常に対応します。 union .