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