Возможно, вы неправильно понимаете цель союза.
Объединение обычно используется для хранения одного элемента, который может иметь одну из нескольких форм. Например:
// Define an array of 20 employees, each identified either by name or ID.
union ID {
char name[10]; // ID may be a name up to 10 chars...
int serialNum; // ... or it may be a serial number.
} employees[20];
// Store some data.
employees[0].serialNum = 123;
strcpy(employees[1].name, "Manoj");
Критическое различие между struct
и union
состоит в том, что struct
представляет собой совокупность многих фрагментов данных, а union
представляет собой наложение : вы можете хранить только один элементов, потому что они все используют одну и ту же память. В приведенном выше примере каждый элемент в массиве employees[]
состоит из 10 байтов, что является наименьшим объемом памяти, который может содержать либо 10 char
s или 1 int
. Если вы ссылаетесь на элемент name
, вы можете сохранить 10 char
s. Если вы ссылаетесь на элемент serialNum
, вы можете сохранить 1 int
(скажем, 4 байта) и не сможете получить доступ к оставшимся 6 байтам.
Так что я думаю, что вы хотите использовать разные, отдельные структуры для представления членов семьи. То, что вы сделали, похоже, втиснуло несколько квадратных колышков в одно круглое домашнее задание. : -)
Примечание для продвинутых читателей: пожалуйста, не упоминайте отступы и выравнивание слов. Они, вероятно, покрыты в следующем семестре. : -)