Основы программирования для автоматизированного проектирования и решения творческих задач. Романенко А.В - 22 стр.

UptoLike

Составители: 

struct
{
double re, im;
} complex = {0.2, 3.1};
Имя структурного типа обладает всеми свойствами имен типов данных, поэтому можно определить указатель на струк-
туру:
struct имя_структурного_типа *имя_указателя;
Значением указателя на структуру станет номер байта, с которого начинается размещение структуры в памяти.
Обратиться к полям структуры, используя имя указателя на нее, можно двумя способами:
1) (*имя_указателя).поле;
2) имя_указателя->поле.
Для полей структур существует только одно ограничение: поле структуры не может иметь тот же тип, что и тип самой
структуры.
struct А {struct А a; int i;}; // Это запрещено
Однако допускается использование указателя на этот тип:
struct А {struct А *a; int i;};
Возможно использование перекрестных указателей структур друг на друга:
struct A; // Неполное определение структурного типа
struct B {struct A *Pa;};
struct A {struct B *Pb;};
11.3 Объединения
Объединения в языке С очень похожи на структуры. Главным их отличием является то, что все поля объединения начи-
наются с одного адреса, а общая его длина равна длине в байтах наибольшего поля. Определение объединения выглядит
следующим образом:
union имя_типа_объединения
{
тип1 поле1;
тип2 поле2;
типn полеn;
} переменная_объединение;
Обращение к полям объединений осуществляется с помощью уточненных имен:
имя_объединения.имя_элемента;
Определение указателей на объединения и работа с ними осуществляется аналогично подобным операциям со структу-
рами.
11.4 Битовые поля структур и объединений
В составе структур и объединений могут в качестве компонентов использоваться битовые поля. Каждое такое поле
представляет собой целочисленное значение, занимающее в памяти фиксированное число битов. Битовые поля не имеют ад-
ресов, а следовательно, они не могут объединяться в массивы, на них нельзя объявить указатель. Главное назначение бито-
вых полейобеспечение удобного доступа к отдельным битам. Определение структуры с битовыми полями в языке С вы-
глядит следующим образом:
struct
{
тип_поля1 имя_поля1 : ширина_поля;
тип_поля2 имя_поля2 : ширина_поля;
тип_поляn имя_поляn : ширина_поля;
} имя_структуры;
здесь тип_поляцелочисленный тип данных; ширина_поляцелое десятичное число без знака.