我需要使一个数组像枚举一样工作,我可以在初始化期间更改数组中元素的索引位置。例如,我们可以有一个枚举
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。
我希望这很清楚......
答案 0 :(得分:5)
C99 +:
int a[6] = { [4] = 29, [2] = 15 };
此语法在C89模式下也可用作gcc扩展名。