ALTE DOCUMENTE
|
|||||||||
Объединение - это пер&# 23523m1214x 1077;менная, которая в различные моменты времени может содержать объекты разных типов и размеров, причем компилятор берет на себя отслеживание размера и требований выравнивания. Объединения предоставляют возможность работать с различными видами данных в одной области памяти, не вводя в программу никакой машинно-зависимой информации.
int float или быть указателями на символы. значение каждой конкретной константы должно храниться в пер&# 23523m1214x 1077;менной соответствующего типа, но все же для управления таблицей самым удобным было бы, если это значение занимало бы один и тот же объем памяти и хранилось в том же самом месте независимо от его типа. Это и является назначением объединения - выделить отдельную пер&# 23523m1214x 1077;менную, в которой можно законно хранить любую одну из пер&# 23523m1214x 1077;менных нескольких типов. Как и в случае полей, синтаксис основывается на структурах:
union u tag
uval
uval uval
Указатель_объединения->элемент
uval, используется пер&# 23523m1214x 1077;менная utype
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
uval
} symtab nsym
на пер&# 23523m1214x 1077;менную ival
symtab i uval ival
а на пер&# 23523m1214x 1074;ый символ строки pval
symtab i uval pval .
Как и в случае структур, единственными опер&# 23523m1214x 1072;циями, которые в настоящее время можно проводить с объединениями, являются доступ к элементу и извлечение адреса; объединения не могут быть присвоены, пер&# 23523m1214x 1077;даны функциям или возвращены ими. Указатели объединений можно использовать в точно такой же манере, как и указатели структур.
|