Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otveti_k_programm.doc
Скачиваний:
0
Добавлен:
26.09.2019
Размер:
1.55 Mб
Скачать
  1. Пользовательские типы данных: структуры. Битовые поля. Передача структур в функции

Битовые поля — это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти — 1 байт, а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа):

struct Options{

bool centerX:1;

bool centerY:1;

unsigned int shadow:2;

unsigned int palette:4;

};

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

  1. Пользовательские типы данных: объединения (union)

  1. Пользовательские типы данных: перечисляемый тип данных (enum).

Си поддерживает все перечислимые типы ANSI стандарта. Пе-

речислимый тип данных используется для описания дискретного

множества целых значений. Например, вы можете объявить сле-

дующее:

enum days { sun, mon, tues, wed, thur, fri, sat };

Имена, перечисленные в days, являются целыми константами:

первая (sun) автоматически установлена в ноль, а каждая следую-

щая имеет значение на единицу больше, чем предыдущая (mon=1,

tues=2 и т.д.).

Однако вы можете присвоить константам и опреде-

ленные значения. Следующие имена без конкретных значений бу-

дут в этом случае, как и раньше, иметь значения предыдущих эле-

ментов с увеличением на единицу, например:

enum coins {penny=1, nickle=5, dime=10, quarter=25};

Переменной перечислимого типа может быть присвоено любое

значение типа int – проверка типа не производится

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]