【问题标题】:Discriminating between two different structs, nested in a union, with common attributes in C区分嵌套在联合中的两个不同结构,在 C 中具有公共属性
【发布时间】:2015-10-17 02:38:57
【问题描述】:

鉴于这个快速完成的示例,我希望能够通过公共属性(colormainFoodSource)搜索 animals 数组并仅输出 bearssnakes指定的匹配属性。

鉴于我的 animals 数组被定义如下:

struct animal{
    char key; //I believe this is a correct usage of a discriminator

    union myUnion{
          char mainFoodSource[10];
          int numLimbs : 3;

           struct bear{     
                char blackOrBrown[5];
                float height;      //in feet standing
           } b;

           struct snake{                 
                float length;
                char mainColor[20];
           } s;            
    } u;
} animals[20];

如何使用char key 区分数组中的每个元素是bear 还是snake;我放在联合之前?

【问题讨论】:

  • 为什么 mainFoodSource 和 numLimbs 是工会的成员?
  • 您需要更多地了解类(基类和派生类)、继承等的概念。您可能需要为不同的动物派生类,然后将它们存储在基类类型中数组或类似的东西
  • 在 C 中编程时没有“类”。对于这个问题,我已经将信息存储在头文件中,并且必须有一个交互式选项,以便根据搜索仅打印某些功能.一切都很完美......除了我无法在同一个数组中的两个不同结构之间破译。

标签: c arrays struct unions discriminator


【解决方案1】:

这只是基于您在需求中解释的建议。

有一个变量键来存储'b'来表示它是一只熊,'s'如果它是一条蛇。

myUnion 将分配最大内存为 (sizeof(float)+sizeof(char[20]);

尝试将 mainColor 和 mainFoodSource 放在一个结构变量中以防止混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多