【问题标题】:Access an enum using an index in C使用 C 中的索引访问枚举
【发布时间】:2016-09-22 12:40:11
【问题描述】:

考虑:

enum Test
{
    a = 3,
    b = 7,
    c = 1
};

我想使用索引访问枚举。像这样的:

for (i=0; i<n; i++)
    doSomething((Test)i);

我该如何做这样的事情,我可以使用索引访问枚举,尽管枚举的成员具有不同的值?

【问题讨论】:

标签: c enums indexing


【解决方案1】:

这是你能做的最好的:

enum Test { a = 3, b = 7, c = 1, LAST = -1 };
static const enum Test Test_map[] = { a, b, c, LAST };

for (int i = 0; Test_map[i] != LAST; i++)
    doSomething(Test_map[i]);

您必须自己维护映射。

【讨论】:

    【解决方案2】:

    你不能那样做。 C 枚举只不过是一堆常量。在 C# 或 Java enum 中可能没有类型安全或反射。

    【讨论】:

      【解决方案3】:

      您的问题表明您并不真正了解枚举的用途。

      这不是可以索引的东西,也没有任何理由这样做。你定义的其实只是三个常量abc,它们的值分别是371

      【讨论】:

        【解决方案4】:

        正如其他人提到的,这不是枚举的目的。为了做你所要求的,你可以简单地使用一个数组:

        #define a 3
        #define b 7
        #define c 1
        
        int array[3] = { a, b, c };
        int i;
        
        for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ ) {
            doSomething( array[i] );
        }
        

        【讨论】:

        • 是的,但与枚举不同,您必须指定值的类型。您还必须确保索引不会高于单元格的数量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2021-03-09
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        相关资源
        最近更新 更多