[英]Define an array with enum variable as array size
將枚舉變量定義為數組大小的數組意味着什么?
例如,我有以下代碼:
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
};
因為枚舉元素的自然值從零開始,並且對每個成員遞增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];
如果沒有明確指定,則自動為每個枚舉元素分配無符號整數。 因此,使用枚舉聲明, 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
不是另外使用的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.