![](/user_photo/2706_HbeT2.jpg)
- •2.Этапы создания исполняемой проги
- •Целые, вещественные, символьные и строковые константы в языке с
- •Простые типы данных в языке с
- •Диапазоны изменения значений простых типов данных в языке с. Спецификаторы типа: short, long, signed, unsigned
- •Типы данных с плавающей точкой и тип void в языке с
- •Выражения в языке с
- •Переменные в языке с, их описание и инициализация
- •Именованные константы в языке с
- •11.Операции языка с, их классификация и приоритеты
- •14.Операции инкремента и декремента
- •15. Операции явного преобразования типа и определения размера в языке с
- •18.Логические операции не, и, или в языке с (!, &&, //)
- •19.Условная операция (? :) в языке с
- •20.Операция запятая на языке с.
- •21.Операция взятия адреса и разадресации
- •22.Операторы в языке с. Составные операторы
- •23.Структура программы в языке с
- •24.Базовые конструкции структурного программирования
- •26.Операторы ветвления. Оператор switch
- •27.Операторы цикла в языке с
- •28.Цикл с предусловием while
- •29.Цикл с постусловием do-while
- •30.Цикл с параметром for. Операторы break и continue
- •31. Приведение цикла for к эквивалентному ему циклу while.
- •32. Варианты оператора for, связанные с упрощением его заголовка или тела цикла
- •33.Массивы в языке с, их описание и инициализация
- •34.Многомерные массивы в языке с, их описание и инициализация
- •35.Указатели и массивы. Правила адресной арифметики над указателями
- •36. Строки символов в языке с, их описание и инициализация
- •Функции, используемые в операциях ввода и вывода строк символов
- •38.Функции в языке с и их описание
- •40. Параметры функции. Передача параметров по значению и по адресу.
- •41.Передача массивов в качестве параметров функции
- •43. Функции стандартной библиотеки с
- •44.Функции форматного вывода и ввода printf и scanf
- •45.Перечисления в языке с
- •46.Структуры в языке с, их описание и инициализация
- •47.Массивы структур, их описание и инициализация
- •48. Битовые поля
- •49. Объединения в языке с
- •50. Переименование типов в языке с
48. Битовые поля
Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти – 1 байт (8 бит), а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах. Битовые поля могут быть любого целого типа и обычно используется тип unsigned int (сокращенно unsigned) . Например:
struct options //если не использовать битовые поля, то
{ //структурная переменная займет 4 байта:
unsigned bold : 1; // char bold;
unsigned italic : 1; // char italic;
unsigned underline : 1; // char underline;
unsigned background : 4; // char background;
} opt;
Под переменную opt структурного типа options будет отведена память размером 1 байт.
Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, т.к. компилятор должен генерировать специальные коды, увеличивающие общий объем кода программы. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.
49. Объединения в языке с
Объединение представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как и у структуры, только вместо ключевого слова struct используется слово union. Длина объединения равна наибольшей из длин его полей. В каждый момент времени объединение хранит только одно значение, и ответственность за его правильное использование лежит на программисте.
Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется. Пример:
#include <stdio.h>
void main()
{
int payType; //тип платежа
union payment
{
char card[25]; //оплата по карте
int check; //оплата чеком
} info;
// . . . присваивание значений переменным payType и info
switch (payType)
{
case 0: printf("Оплата по карте: %s", info.card); break;
case 1: printf("Оплата чеком: %d", info.check); break;
}
}
В отличие от структуры объединение может инициализироваться только значением его первого поля, а также не может содержать битовых полей.
50. Переименование типов в языке с
Для того, чтобы сделать программу более ясной, можно задать тиру еовое имя с помощью ключевого слова typedef:
typedef Тип НовоеИмяТипа[Размерность];
Размерность может отсутствовать. Примеры:
typedef unsigned int uint;
typedef char message[100];
typedef char *string;
typedef struct
{
char fio[30];
int tabNumber;
double salary;
} worker;
Введенные таким образом имена можно использовать таким же образом, как и имена простых типов данных:
uint i, j; //две переменные типа unsigned int
message str[10]; //массив из 10 строк по 100 символов в каждой строке
string p = str; //инициализированный указатель на char
worker staff[100]; //массив из 100 структур
Кроме задания типам с длинными описаниями более коротких имен, typedef используется для облегчения переносимости программ: если машинно-зависимые типы объявить с помощью опереаторов typedef, при переносе программы потребуется внести изменения только в эти операторы.