区分两个不同的结构,嵌套在一个联合中,在 C 中具有共同的属性

Discriminating between two different structs, nested in a union, with common attributes in C

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

鉴于我的 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];

我如何能够区分数组中的每个元素是 bear 还是 snake,使用那个 char key;我已经放在并集之前了?

这只是根据您在需求中解释的内容提出的建议。

有变量键来存储 'b' 表示它是熊,'s' 表示它是蛇。

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

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