ВУЗ:
Составители:
Рубрика:
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 : ширина_поля;
} имя_структуры;
здесь тип_поля – целочисленный тип данных; ширина_поля – целое десятичное число без знака.
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »