【问题标题】:How to make an array to store enum arrays in C?如何制作一个数组以在 C 中存储枚举数组?
【发布时间】:2016-03-29 22:27:15
【问题描述】:

场景就像我有 2 个枚举数组:

FRUITS fruit1[2][3] = 
{
    {apple, kiwi, banana},
    {banana, kiwi, kiwi}
};

FRUITS fruit2[3][2] =
{
    {apple, banana},
    {apple, kiwi},
    {banana, kiwi}
};

如何声明一个数组来存储上述 2 个数组?喜欢:

TYPE Array[] = {fruit1,fruit2};

非常感谢!

【问题讨论】:

    标签: arrays enums


    【解决方案1】:

    您不能以这种方式“存储”它们,因为您的两个数组具有不同的维度。维度是类型的一部分,您基本上希望拥有不同类型的元素数组。

    另一个问题是,如果没有明确的memcpy,您就不能拥有两个数组副本。

    如果您想拥有具有不同维度的二维数组并在运行时使用它们,您应该为每个数组结构引入指向其中第一个元素及其维度的指针。当然,您必须管理内存。

    我猜这个问题与enums 无关,因为在C 中enum 只是它的底层类型(int)。

    【讨论】:

    • 非常感谢您的解释。那么你能建议我一种存储 2 个相同维度的枚举数组的方法吗?
    • 如果您想以奇特的方式访问它们,最简单的方法是声明 3 维数组。或者您可能需要指向二维数组的指针数组:FRUITS *(Array[2][3])[] = {&fruit1, &fruit2}。或FRUITS *(Array[3])[] = {fruit1, fruit2} 丢失一维信息。但是这里的事情变得复杂了......你也可以尝试使用typedef FRUIT fruit_array2d_t[2][3]; fruit_array2d_t *Array[] = {&fruit, &fruit2}`。或者制作一些结构来存储维度和简单的线性内存块以及访问元素的函数。
    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多