Язык С




Объединения


Oбъединения - это переменная, которая в различные момен- ты времени может содержать объекты разных типов и размеров, причем компилятор берет на себя отслеживание размера и тре- бований выравнивания. Объединения представляют возможность работать с различными видами данных в одной области памяти, не вводя в программу никакой машинно-зависимой информации. В качестве примера, снова из символьной таблицы компиля- тора, предположим, что константы могут быть типа INT , FLOAT или быть указателями на символы. значение каждой конкретной константы должно храниться в переменной соотвествующего ти- па, но все же для управления таблицей самым удобным было бы, если это значение занимало бы один и тот же объем памяти и хранилось в том же самом месте независимо от его типа. это и является назначением объединения - выделить отдельную пере- менную, в которой можно законно хранить любую одну из пере- менных нескольких типов. Как и в случае полей, синтаксис ос- новывается на структурах.

UNION U_TAG \( INT IVAL; FLOAT FVAL; CHAR *PVAL; \) UVAL;

Переменная UVAL будет иметь достаточно большой размер,чтобы хранить наибольший из трех типов, независимо от машины, на которой осуществляется компиляция, - программа не будет за- висить от характеристик аппаратных средств. Любой из этих трех типов может быть присвоен UVAR и затем использован в выражениях, пока такое использование совместимо: извлекаемый тип должен совпадать с последним помещенным типом. Дело программиста - следить за тем, какой тип хранится в объеди- нении в данный момент; если что-либо хранится как один тип, а извлекается как другой, то результаты будут зависеть от используемой машины.

Синтаксически доступ к членам объединения осуществляется следующим образом:

имя объединения.член -------------------- или указатель объединения ->член ----------------------------

то есть точно так же, как и в случае структур. если для отс- леживания типа, хранимого в данный момент в UVAL, использу- ется переменная UTYPE, то можно встретить такой участок программы:




Содержание  Назад  Вперед