1

初期化中に配列内の要素のインデックス位置を変更できる列挙型のように配列を機能させる必要があります。たとえば、列挙型を持つことができます

enum Fruit_t {
APPLES,
ORANGES,
STRAWBERRIES = 8 }

ここで、イチゴは 2 ではなく 8 になります。代わりに、位置を変更できる配列でこれを行うことはできますか? これはCで可能ですか?はいの場合、どのようにお願いしますか?

他の可能な提案をいただければ幸いです

私の意図を説明させてください

関数ポインタの配列を使用しています

static BT (*data_access_typ [4])() =
{ 

    NULL,
    ARRAY,  
    STRUCT,
    dnt_cr

};

この関数を呼び出す必要があります

(access_data[*VAL])()

*VAL は、この列挙型の任意の値にすることができます

enum data_access_typ    {
                        Null, array, struc, bool, bit_str, int32, unsin32, float_pt, oct_str=9, vis_str,
                        bcd=13, int8=15, int16, unsin8, unsin16, int64=20, unsin64, _enum, float32, float64,
                        date_tim, date, time, dnt_cr=225
                    };

値が NULL、ARRAY、STRUCT、dnt_car (255) のいずれかである場合に実行する別の関数がありますが、すべての型は必要ありません。ほんの数個の 5 つまたは 6 つの関数。だから私は本当に列挙型を使うつもりはありません(私がやりたいことのためにそれを機能させる方法をまだ理解しようとしています)。

私がやりたいのは、*VAL の値が、想定される列挙型の値に対応するインデックスを持つ関数ポインター配列で呼び出す関数を決定することだけです。

例えば、

(access_data[*VAL])()

上記のコードから、*VAL が 3 の場合にのみ dnt_cr 関数が呼び出されますが、*VAL が 225 の場合は dnt_cr を呼び出す必要があります。

これが明確であることを願っています...

4

1 に答える 1

5

C99+:

int a[6] = { [4] = 29, [2] = 15 };

この構文は、C89 モードの gcc 拡張機能としても利用できます。

于 2013-01-07T10:26:20.493 に答える