【发布时间】:2013-01-07 10:22:53
【问题描述】:
我需要让一个数组像枚举一样工作,我可以在初始化期间更改数组中元素的索引位置。例如,我们可以有一个枚举
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。
我希望这很清楚......
【问题讨论】:
-
你的意思是你想要像 `int a[5] = {,,3,4,} 这样的东西来只初始化第三个和第四个元素吗? (是的,我知道它不是有效的代码,但这是我试图澄清的想法)。
-
@WhozCraig 请看看我上面的编辑。我做了进一步的解释。
-
@WhozCraig 看着 `int a[5] = {,,3,4,}。如何实现?