我有一个包含255个元素的数组。我需要在这个数组中存储100个值。例如,如果有3个项目为rose,red,则rat arr[0]
应代表rose
,arr[1]
应代表red
,arr[2]
代表rat
}。然后,这些值被指定为arr[0] = 100
,arr[1] = 200
,arr[2] = 300
。现在,当我想获得rat
的值时,我应该能够通过访问其索引arr[2]=300
来直接获取值。我的想法是创建宏并为每个项分配值,并直接访问数组中的值。
例如:
#define ROSE 0
#define RED 1
#define RAT 2
然后直接针对rat
我会说arr[RAT]
来获取值。这是100件物品的好方法吗?
ADDITION:
现在如果项目的价值大小变化怎么办?对于前者red
的值为4字节,rat
的值为2字节,uint8 arr[255];
red
的值应从arr[1]
开始,rat
的值应从{{}开始1}}。枚举仍然在这里工作吗?
答案 0 :(得分:2)
使用枚举可能是更好的方法:
enum Item {
ROSE = 0,
RED = 1,
RAT = 2
};
arr[RAT]=300
enum
结构更容易扩展(添加新的item
,插入新项并增加其他项的索引)。如果您使用宏,则必须手动执行此操作。
答案 1 :(得分:2)
您还可以使用C Enumeration Declarations,enums
:
typedef enum {rose, red, rat} index;
现在,您可以在代码中访问= arr[rat]
的{{1}}。
通常我会避免使用这种常量的宏(其中许多常量是相似的类型)。我认为它应该是具有用户定义域arr[2]
的类型。
枚举由一组命名的整数常量组成。枚举类型声明给出(可选)枚举标记的名称,并定义命名整数标识符的集合(称为“枚举集”,“枚举器常量”,“枚举器”或“成员”)。
宏我更喜欢数组大小:
enum
感谢@ junix在我的回答中添加了非常好的观点:
最好定义#define SIZE 100;
int arr[SIZE]
来添加一个给出元素总数的最后一个元素,例如:
enum
现在我的枚举域范围为typedef enum { rose,
red,
rat,
/* add new elements here */
item_count
} index;
,我们可以使用[0, item_count]
值,例如:
item_count
当然,我们没有宏的这个好处!
答案 2 :(得分:1)
你应该使用枚举:
enum {ROSE, RED, RAT, ...}
更好地表达你的意图。您确定不同的标签会获得不同的价值。此外,如果您以后使用开关,如果您忘记了一些索引,您将收到警告。
答案 3 :(得分:0)
实际上,这听起来像hash table的理想候选人。
无论是宏观定义还是枚举,必须保持100个单独的符号会很痛苦。