Объединения могут появляться внутри структур
if (utype == int) printf("%d\n", uval.ival); else if (utype == float) printf("%f\n", uval.fval); else if (utype == string) printf("%s\n", uval.pval); else printf("bad type %d in utype\n", utype);
Объединения могут появляться внутри структур и массивов и наоборот. Запись для обращения к члену объединения в структуре (или наоборот) совершенно идентична той, которая используется во вложенных структурах. Например, в массиве структур, определеным следующим образом
struct { char *name; int flags; int utype; union { int ival; float fval; char *pval; } uval; } symtab[nsym];
на переменную ival можно сослаться как
symtab[i].uval.ival
а на первый символ строки pval как
*symtab[i].uval.pval
В сущности объединение является структурой, в которой все члены имеют нулевое смещение. Сама структура достаточно велика, чтобы хранить "самый широкий" член, и выравнивание пригодно для всех типов, входящих в объединение. Как и в случае структур, единственными операциями, которые в настоящее время можно проводить с объединениями, являются доступ к члену и извлечение адреса; объединения не могут быть присвоены, переданы функциям или возвращены ими. указатели объединений можно использовать в точно такой же манере, как и указатели структур.
Программа распределения памяти, приводимая в лекции №8, показывает, как можно использовать объединение, чтобы сделать некоторую переменную выровненной по определенному виду границы памяти.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий