0

我有一个包含 255 个元素的数组。我需要在这个数组中存储 100 个值。例如,如果有 3 个项目 rose、red、rat 那么arr[0]应该表示rosearr[1]应该表示redarr[2]as rat。然后将这些值分配为arr[0] = 100, arr[1] = 200, arr[2] = 300。现在,当我想获取 的值时,rat我应该能够通过访问其索引 ie 直接获取该值arr[2]=300。我的想法是创建宏并为每个项目分配值并直接访问数组中的值。例子:

#define ROSE 0 
#define RED 1
#define RAT 2

然后直接forrat我会说arr[RAT]获取值。这是 100 件商品的好方法吗? ADDITION: 现在如果项目值的大小不同怎么办?例如。red有 4bytes 值和rat2bytes 值,那么 foruint8 arr[255]; red应该开始于arr[1]并且rat应该开始于arr[5]. 枚举在这里仍然有效吗?

4

4 回答 4

2

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

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

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

于 2013-07-16T11:33:48.290 回答
2

您还可以使用C 枚举声明enums

typedef enum {rose, red, rat} index; 

现在在您的代码中,您可以访问arr[rat]== arr[2]

一般来说,我避免使用宏来处理这种常量(其中许多常量的类型相似)。我认为它应该是具有用户定义域的类型,即enum.

枚举由一组命名的整数常量组成。枚举类型声明给出(可选)枚举标记的名称并定义命名整数标识符的集合(称为“枚举集”、“枚举器常量”、“枚举器”或“成员”)。

宏我更喜欢数组大小:

#define SIZE  100;

int arr[SIZE]

感谢@junix在我的回答中添加了非常好的观点:

enum添加最后一个元素来定义元素总数是个好主意,例如:

typedef enum { rose, 
               red, 
               rat, 
               /* add new elements here */ 
              item_count
        } index;

现在我的枚举域范围是[0, item_count],我们可以使用item_count值,例如:

int arr[item_count];

当然,宏没有这个好处!

于 2013-07-16T11:33:56.477 回答
1

您应该使用枚举:

enum {ROSE, RED, RAT, ...}

它更好地表达你的意图。您确定不同的标签将获得不同的价值。此外,如果稍后您使用开关,如果您忘记了某些索引,您会收到警告。

于 2013-07-16T11:34:10.610 回答
0

实际上,这听起来像是哈希表的理想候选者。

必须维护 100 个单独的符号会很痛苦,无论它们是宏定义还是枚举。

于 2013-07-16T13:58:48.377 回答