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 回答