将枚举变量定义为数组大小的数组是什么意思?
例如我有以下代码:
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];
我不明白...
谢谢您的帮助。
首先要记住的是枚举值是编译时常量。另一件事是枚举值(除非初始化为特定值)增加。所以在你的情况下D_ROM_RDE_GROUP_0
等于0
,D_ROM_RDE_GROUP_1
等于1
,D_ROM_RDE_MAX_GROUPS
等于2
。
这意味着当你声明数组时,它基本上是一样的
U_08 pPlaneCopy[2];
在您的情况下,枚举值 D_ROM_RDE_MAX_GROUPS 实际上是一个整数值: 2. 因此,您正在定义一个包含两个元素的数组。索引可能会访问这两个元素:D_ROM_RDE_GROUP_0 和 D_ROM_RDE_GROUP_1
这是一种常用于定义以某种方式与枚举中的值相关的数组的技术。举个简单的例子:
enum {
ZERO,
ONE,
TWO,
THREE,
MAX_VALUE //has value of 4
};
strings
因为枚举元素的自然值从 0 开始,并且对于每个成员递增 1,所以最终值对于初始化任何类型的数组( 、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];
如果没有明确指定,则自动为每个枚举元素分配一个无符号整数。因此,使用您的枚举声明,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
不是以其他方式使用的值。