Операционная система UNIX. Руководство программиста

       

Структуры и объединения


Структуры и объединения можно присваивать, передавать в качестве параметров функциям и возвращать как результаты функций. Другие вполне осмысленные операции, такие как проверка равенства и преобразование типа структуры, не реализованы.

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

union { struct { int type; } n; struct { int type; int intnode; } ni; struct { int type; float floatnode; } nf; } u; . . . u.nf.type = FLOAT; u.nf.floatnode = 3.14; . . . if (u.n.type == FLOAT) ... sin (u.nf.floatnode) ...



Содержание раздела