Различение между двумя различными структурами, вложенными в объединение, с общими атрибутами в C

Учитывая этот быстро сделанный пример, в котором я хочу иметь возможность искать animals массив по общим атрибутам (либо color или же mainFoodSource) и выводить только 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Я поставил перед союзом?

1 ответ

Решение

Это просто предложение, основанное на том, что вы объяснили в требовании.

Имейте переменный ключ, чтобы сохранить 'b' для обозначения его медведя и 's', если это змея.

MyUnion выделит максимальный объем памяти (sizeof(float)+sizeof(char[20]);

Старайтесь иметь mainColor и mainFoodSource в одной структурной переменной, чтобы избежать путаницы.

Другие вопросы по тегам