将枚举变量定义为数组大小的数组是什么意思?
例如,我有以下代码:
typedef enum
{
D_ROM_RDE_GROUP_0 = 0x0,
D_ROM_RDE_GROUP_1,
D_ROM_RDE_MAX_GROUPS
}E_ROM_RDE_GROUPS;
U_08 pPlaneCopy[D_ROM_RDE_MAX_GROUPS];
我不明白......
感谢您的帮助。
答案 0 :(得分:4)
要记住的第一件事是枚举值是编译时常量。另一件事是枚举值(除非初始化为特定值)增加。因此,在您的情况下D_ROM_RDE_GROUP_0
等于0
,D_ROM_RDE_GROUP_1
等于1
且D_ROM_RDE_MAX_GROUPS
等于2
。
这意味着当你声明数组时,它与
基本相同U_08 pPlaneCopy[2];
答案 1 :(得分:1)
枚举值D_ROM_RDE_MAX_GROUPS实际上是一个整数值,在你的情况下:2。所以你定义了一个包含两个元素的数组。索引可能会访问这两个元素:D_ROM_RDE_GROUP_0和D_ROM_RDE_GROUP_1
答案 2 :(得分:1)
这是一种技术,通常用于定义一个与枚举中的值相关的数组。举个简单的例子:
enum {
ZERO,
ONE,
TWO,
THREE,
MAX_VALUE //has value of 4
};
因为枚举元素的自然值从零开始,并且每个成员递增1,所以最终值对于初始化任何类型的数组(strings
,ints
总是有用的,floats
等)对于与该最终值相等的多个元素。例如
int numbers[MAX_VALUE];//an array with 4 elements
int i;
然后,您可以使用MAX_VALUE来保证在循环中处理数组,而不会超出数组的范围,例如。类似的东西:
for(i=0;i<MAX_VALUE;i++)//will loop 4 times
{
numbers[i]=i;//assigned a value equal to its namesake, for i < MAX_VALUE
}
鉴于此解释,原始帖子中的枚举只是初始化为值2:
U_08 pPlaneCopy[D_ROM_RDE_MAX_GROUPS];
与
相同U_08 pPlaneCopy[2];
答案 3 :(得分:1)
如果没有明确指定,则无符号整数会自动分配给每个枚举元素。因此,使用您的枚举声明,D_ROM_RDE_GROUP_0
等于0
,D_ROM_RDE_GROUP_1
等于1
,D_ROM_RDE_MAX_GROUPS
等于2。
因此,宣言
U_08 pPlaneCopy[D_ROM_RDE_MAX_GROUPS];
相当于
U_08 pPlaneCopy[2];
这意味着,您声明了一个数组,其中一个U_08
元素对应于E_ROM_RDE_GROUPS
中每个可能的值,假设D_ROM_RDE_MAX_GROUPS
不是另外使用的值。