- •4.Элементы языка Си. Символы, лексемы, знаки операций.
- •1.Символы языка
- •2.Лексемы
- •5.Элементы языка Си. Константы, идентификаторы, ключевые слова, комментарии.
- •6.Типы данных.
- •7.1,Объявление переменных. Массивы.
- •7.2,Объявление переменных. Массивы.
- •9.1,Операции и выражения. Арифметические операции
- •11. Логические операции и операции отношения. Операции присваивания
- •12.Условное выражение. Операция Sizeof. Операции приведения типов type.
- •13.1,Преобразование типов в выражения. Правила приведения типов.
- •13.2,Преобразование типов в выражения. Правила приведения типов.
- •14.1, Управление вычислительными процессами. Конструкции if-else, else-if.
- •14.2, Управление вычислительными процессами. Конструкции if-else, else-if.
- •15.Переключатель
- •16. Операторы цикла.
- •17.1.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •17.2.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •Пустой оператор
- •18.1.Классы памяти.
- •18.2.Классы памяти.
- •19.1. Функции. Определение ф-ций.
- •Определение ф-ции
- •19.2. Функции. Определение ф-ций.
- •21. Структура программы на языке Си
- •22. Директивы #define и # undef.
- •24,Директивы препроцессора. Препроцессорные операции.
- •Препроцессорные операции
- •25.1, Указатели.Операции &,*.
- •25.2, Указатели.Операции &,*.
- •26. Указатель на неопределенный тип.
- •27.1,Выражения и операции с указателями. Присваивание указателей
- •Сравнение указателей
- •27.2,Выражения и операции с указателями. Применение арифметических операций к указателям
- •29. Массивы и указатели.
- •30.Операции с указателями на массив. Адресная арифметика.
- •32.Массивы указателей. Указатели на указатели.
- •33.Массивы указателей на строки.
- •34.1,Передача параметров из операционной среды.
- •34.2,Передача параметров из операционной среды.
- •36.1,Динамичное распределение памяти.
- •36.2,Динамичное распределение памяти.
- •37,1,Структуры. Операции над структурами
- •37,2,Структуры. Операции над структурами
- •38.Массив структур. Правило выравнивания структурных переменных в памяти
- •39.1,Переименование типов. Средство typedef.
- •39.2,Переименование типов. Средство typedef.
- •40.Поля битов.
- •41.1,Объединения
- •41.2,Объединения
- •42.Ввод, вывод потока.
- •43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.
- •44.1,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •44.2,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •45,Последовательный и прямой доступ в поток.
39.2,Переименование типов. Средство typedef.
1)параметризация программы связаная с проблемой переносимости. Если с помощью средства typedef объявить типы данных, которые машинно зависимые, то при переносе программы на другую машину потребуется внести изменения только в определение typedef.
2)Кратность , наглядность и удобность.
40.Поля битов.
Язык С допускает использование в структурах полей особого типа – битовых полей (или полей битов). Их использование делает возможным доступ к отдельным битам более крупных объектов. Это позволяет экономнее использовать память. Например : если переменная принимает значения “0” или “1” (флаг), то для ее представления можно использовать 1 бит. Использование групп однобитовых флагов позволяет запаковать несколько объектов в одном машинном слове.
Поле битов – некоторое множество битов, лежащих рядом внутри одной, зависящей от реализации единицы памяти.
Описание поля битов : тип [имя] : ширина;
Тип может быть int, signed, unsigned.
Не допускаются массивы полей битов, указатели на поля битов и функции, возвращающие поля битов.
Каждому битовому полю выделяеться ровно столько бит, сколько указано в поле “ширина”(от 0 до размера длины слова).
Ссылка на битовое поле выполняется по имени, указанном в поле “имя”. Поля могут не иметь имени. В этом случае организуеться пропуск заданного числа бит. Т.е. биты выделяются, но доступ к ним не возможен. Особая ширина безымянного поля, равная 0, используется когда надо выйти на границу следующего слова. Битовое поле может существовать только как элемент структуры и определяет из скольки бит состоит каждый её элемент.
struct имя_типа_структуры {
тип имя1:ширина1;
тип имя2:ширина2;
……….
тип имяN:ширинаN;};
Длина структуры всегда кратна 8;
struct flag{
unsigned one_bit:1;
unsigned two_bit:1;
unsigned three_bit:1;} obj;
Поэтому под переменную obj будет отведено 8 бит, но использоваться будут только первые 3.
В структуре могут быть смешаны обычные переменные и битовые поля. Ссылка к битовым полям obj. one_bit – доступ к полю.
Над битовыми полями возможны следующие операции:
obj.one_bit= obj.two_bit=1;
41.1,Объединения
Объединение – это переменная, которая может содержать в разные моменты времени объекты различных типов и размеров. Фактически объединение – это структура, у которой все её элементы имеют нулевое смещение относительно базового адреса. Размер структуры достаточно велик, чтобы вместить самый большой её элемент, а выравнивание удовлетворяет всем типам объединения. Объединения не могут содержать поля битов. Объявление объединения аналогично объявлению структуры, только вместо слова struct используется union.
union u {
int i;
char c;
long int l;};
union u a,b;
Можно объявить переменные в шаблоне. Переменной типа union выделяется место в памяти (в байтах) ровно столько, сколько нужно для самого большого элемента. Т.е. она будет достаточно большой, чтобы в ней разместились переменные других типов.
В каждый момент времени в переменной типа union хранится только одно значение. И оно может быть использовано в выражении. Если используется меньший элемент объединения, то переменная типа union может содержать неиспользованную память.
Помнить о том, какой элемент хранится в объединении, должен программист.
Объединения могут входить в структуры и массивы и наоборот.
struct {
char *name;
int iv;
union {
int i;
float f;
char *s} u;
} sym [nsym];
sym[k].u.i – доступ к полю i объединения u k-того элемента массива структур sym
*sym[k].u.s равносильно sym[k].u.s[o]