7

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

例如我有以下代码:

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

4 回答 4

8

首先要记住的是枚举值是编译时常量。另一件事是枚举值(除非初始化为特定值)增加。所以在你的情况下D_ROM_RDE_GROUP_0等于0D_ROM_RDE_GROUP_1等于1D_ROM_RDE_MAX_GROUPS等于2

这意味着当你声明数组时,它基本上是一样的

U_08 pPlaneCopy[2];
于 2013-11-10T16:23:56.527 回答
1

在您的情况下,枚举值 D_ROM_RDE_MAX_GROUPS 实际上是一个整数值: 2. 因此,您正在定义一个包含两个元素的数组。索引可能会访问这两个元素:D_ROM_RDE_GROUP_0 和 D_ROM_RDE_GROUP_1

于 2013-11-10T16:23:49.007 回答
1

这是一种常用于定义以某种方式与枚举中的值相关的数组的技术。举个简单的例子:

enum  {
   ZERO, 
   ONE,
   TWO,
   THREE,
   MAX_VALUE //has value of 4
};

strings因为枚举元素的自然值从 0 开始,并且对于每个成员递增 1,所以最终值对于初始化任何类型的数组( 、intsfloats等)对于等于该最终值的元素数量总是有用的价值。例如。

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];
于 2013-11-10T16:25:54.217 回答
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不是以其他方式使用的值。

于 2013-11-10T16:26:07.080 回答