访问数组索引

时间:2013-07-16 11:29:51

标签: c arrays logic analytical

我有一个包含255个元素的数组。我需要在这个数组中存储100个值。例如,如果有3个项目为rose,red,则rat arr[0]应代表rosearr[1]应代表redarr[2]代表rat }。然后,这些值被指定为arr[0] = 100arr[1] = 200arr[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}}。枚举仍然在这里工作吗?

4 个答案:

答案 0 :(得分:2)

使用枚举可能是更好的方法:

enum Item {
    ROSE = 0,
    RED = 1,
    RAT = 2
};
arr[RAT]=300

enum结构更容易扩展(添加新的item,插入新项并增加其他项的索引)。如果您使用宏,则必须手动执行此操作。

答案 1 :(得分:2)

您还可以使用C Enumeration Declarationsenums

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个单独的符号会很痛苦。