每一个项目是否有可能周期和一个枚举提取它的每一个项目值,e.g:周期的一个枚举
enum {
item 1 = 1,
item 2 = 7,
item 3 = 'B'
} items;
如果说,一个数组。可能?
每一个项目是否有可能周期和一个枚举提取它的每一个项目值,e.g:周期的一个枚举
enum {
item 1 = 1,
item 2 = 7,
item 3 = 'B'
} items;
如果说,一个数组。可能?
你的意思是为每个枚举值构造一个元素的数组?这样你最终会得到一个数组{1, 7, 'B'}
?
不可能。枚举并不仅仅是一堆编译时常量。在运行时,它们实际上只是整数。编译器甚至不检查以确保你在你的枚举变量中放入了有效的值(你可以把值5放在那里,它不介意)。所以它不知道运行时可能的枚举值是什么。当然,如果你的枚举是连续的(例如,你已经为值0,1,2和3定义了一个枚举),那么你可以使用for循环来做到这一点。
这是不可能的,你期望的方式。假设你给一个枚举的成员分配连续的数字,那么你可以使用循环遍历这些值。不幸的是,这是你能做的最好的。有关更深入的解释,请参见this answer。
这是不可能的。 enum
的项目只是常量,打个比方可能是#define
d常数:
#define item_1 1
#define item_2 7
#define item_3 'B'
(警告,#define
和enum
不等于这只是打个比方)。
你可以给你的枚举项明确连续的值,如:
enum {
item1=0,
item2=1,
numberOfItems=2
} myEnum;
,然后周期
for (k=item1; k<=numberOfItems; k++)
,但它当然是由你来确保myEnum
是连续的(即包含您尝试以这种方式循环的值)。
糟糕。只是看到你的更新,在这种非连续的情况下,这是不可能的 – fnokke
如果你需要做这在实际应用中,这是一个相当普遍的情况下,您会做以下列方式:
#define ITEM_N 3
typedef enum
{
item1 = 1,
item2 = 7,
item3 = 'B',
} Item_t;
const Item_t LOOKUP_TABLE [ITEM_N] =
{
item1,
item2,
item3
};
...
for(i=0; i<ITEM_N; i++)
{
printf("%d\n", LOOKUP_TABLE[i]);
}
[C++:通过枚举迭代]的可能重复(HTTP ://stackoverflow.com/questions/261963/c-iterate-through-an-enum) – Vladimir