【问题标题】:Define an array with enum variable as array size用枚举变量定义一个数组作为数组大小
【发布时间】:2013-11-22 09:48:50
【问题描述】:

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

例如我有以下代码:

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

没看懂……

感谢您的帮助。

【问题讨论】:

  • 你的问题让我知道了如何解决我的问题,所以 +1 :)

标签: c arrays enums


【解决方案1】:

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

这意味着当你声明数组时,它基本上和

U_08 pPlaneCopy[2];

【讨论】:

  • 非常感谢。很有帮助。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果没有明确指定,一个无符号整数会自动分配给每个枚举元素。因此,在您的枚举声明中,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 不是其他使用的值。

    【讨论】:

    • +1: 但是unsigned? enumint,而不是 unsigned int
    【解决方案4】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多