使用枚举变量定义一个数组作为数组大小

时间:2013-11-10 16:20:45

标签: c arrays enums

将枚举变量定义为数组大小的数组是什么意思?

例如,我有以下代码:

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];

我不明白......

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

要记住的第一件事是枚举值是编译时常量。另一件事是枚举值(除非初始化为特定值)增加。因此,在您的情况下D_ROM_RDE_GROUP_0等于0D_ROM_RDE_GROUP_1等于1D_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,所以最终值对于初始化任何类型的数组(stringsints总是有用的,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等于0D_ROM_RDE_GROUP_1等于1D_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不是另外使用的值。