Язык программирования C


         

Объединения могут появляться внутри структур


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
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий