C中的枚举数组

时间:2013-01-07 10:22:54

标签: c arrays enums

我需要使一个数组像枚举一样工作,我可以在初始化期间更改数组中元素的索引位置。例如,我们可以有一个枚举

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个功能。所以我真的不打算使用枚举(仍然试图弄清楚如何使它适用于我想做的事情)。

我想要做的就是* VAL的任何值都决定了在函数指针数组中调用哪个函数,其索引应该对应于所谓的枚举中的值。

例如,

(access_data[*VAL])()

从上面的代码中,只有当* VAL为3时它才会调用dnt_cr函数,但如果* VAL为225,我想要的是调用dnt_cr。

我希望这很清楚......

1 个答案:

答案 0 :(得分:5)

C99 +:

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

此语法在C89模式下也可用作gcc扩展名。