- •Вопросы к экзамену по дисциплине Программирование. 2012 год.
- •Директивы препроцессора #include, #define
- •Выражения. Классификация выражений. Правила вычисления выражений.
- •Классы памяти. Определение, время существования, область действия, инициализация.
- •Массивы. Объявление, инициализация, индексирование. Одномерные, двумерные массивы.
- •Инициализация массива
- •Двумерные массивы
- •Пользовательские типы данных: структуры. Битовые поля. Передача структур в функции
Пользовательские типы данных: структуры. Битовые поля. Передача структур в функции
Битовые поля — это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти — 1 байт, а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа):
struct Options{
bool centerX:1;
bool centerY:1;
unsigned int shadow:2;
unsigned int palette:4;
};
Битовые поля могут быть любого целого типа. Имя поля может отсутствовать, такие поля служат для выравнивания на аппаратную границу. Доступ к полю осуществляется обычным способом — по имени. Адрес поля получить нельзя, однако в остальном битовые поля можно использовать точно так же, как обычные поля структуры. Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, так как компилятор должен генерировать специальные коды, и экономия памяти под переменные оборачивается увеличением объема кода программы. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.
Пользовательские типы данных: объединения (union)
Пользовательские типы данных: перечисляемый тип данных (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 – проверка типа не производится