- •Языки программирования. Классификация. Яп Си. Место Си в различных классификациях. Преимущества и недостатки.
- •2 Базовые конструкции яп. 3 вида констант *целочисленные, действительные, строковые). Правило составления идентификатора. Зарезервированные слова.
- •Константы
- •3 Общая структура программы на Си. Понятие функции. Функция main. Лексема.
- •Int main() // главная функция
- •5. Схема создания исполняемой программы
- •6. Понятие типа данных. Базовые типы данных языка Си и их характеристика.
- •7. Размещение программы в памяти. 4 цели использования памяти. 6 моделей памяти
- •8 Понятие переменной и 3 ее характеристики. Статические и динамические переменные. Операция присваивания.. Область действия переменной.
- •10 Внешняя память. Понятие глобальной и локальной переменной. Объявление с различными классами памяти.
- •11 Функции. Определение. Имя функции. Независимость. Возвращаемое значение. Прототип. Синтаксис прототипа функции. Оператор return.
- •Int func(int, double, int); // описание прототипа функции
- •12 Структурное программирование. Преимущества структурного программирования. Обработка вызова функции.
- •13 Различия между аргументами и параметрами функции. Передача в функцию адресов переменных.
- •14 Идентификатор, объявленный как функция. Правила определения области видимости функции. Формат вызова функции.
- •16 Понятие массива. Объявление массива. Случаи, в которых константное выражение может быть опущено. Сечение массива.
- •17 Пример объявления символьного массива. Вычисление адреса элемента массива. Связь между массивами и указателями.
- •19 Массивы указателей типа char(указатели и строки). Инициализация символьных массивов. Действия оператора «*».
- •20 Указатели на функцию. Объявление. Инициализация и использование указателя на функцию.
- •21 Передача указателя как аргумента в функцию. Встраиваемые функции. Ключевое слово inline.
- •22 Передача массивов в функцию (2 способа).
- •23 Функции с переменным числом параметров. Подключение stdarg.H. Средства работы и макросы
- •Va_start (ptr, последний_явный_параметр);
- •24 Массивы и динамическая память. Функции malloc, calloc, realloc, free- прототипы и краткий анализ.
- •25 Структуры. Понятие. Объявление. Определение. Обращение к полям структуры.
- •26 Сложные структуры. Структуры, содержащие массивы
- •28 Структуры и указатели. Указатели, как поля структур. Создание указателей на структуры. Указатели и массивы структур. Передача структур в функции.
- •29 Объединения. Определение. Создание. Инициализация. Обращение к отдельным объектам объединения. Создание структурных типов с помощью спецификатора typedef.
- •30 Создание динамически связанных структурных типов. Линейный список. Двусвязный список.
- •31 Потоки ввода-вывода. Понятие потока. Текстовые и двоичные потоки. Стандартные потоки.
- •32 Файлы. Имена файлов. Открытие файла. Ситуации, считающиеся ошибочными, в результате которых функция возвращает значение 0.
16 Понятие массива. Объявление массива. Случаи, в которых константное выражение может быть опущено. Сечение массива.
Массив – совокупность однотипных элементов, отличающихся номером элементов и имеющихся общее имя.
Объявление массива имеет 2 формы:
спецификатор_типа идентификатор[константное выражение]
спецификатор_типа идентификатор[]
Спецификатор типа служит для определения, какого типа элементы будут храниться в памяти.
Идентификатор – это имя массива.
[константное выражение] – количество элементов массива.
Элементами массива не могут быть функции и элементы типа void.
При объявлении массива константное выражение может быть опущено, если:
1)при объявлении массив инициализируется,
2)массив объявлен как формальный параметр,
3)массив объявлен как ссылка на массив, явно определённый в другом файле.
В C определены только одномерные массивы, но, т.к. элементом массива может быть массив, можно определить и многомерные массивы.
17 Пример объявления символьного массива. Вычисление адреса элемента массива. Связь между массивами и указателями.
Пример объявления символьного массива с инициализацией:
char str[] = “объявление символьного массива”;
Идентификатор объявления массива представляет собой указатель – константу, значением которой является адрес первого элемента массива. Тип, адресуемый указателем, это тип элементов массива. Значение указателя изменить нельзя, т.к. идентификатор массива не является L-value выражением.
Пример:
int arr[25];
int *p;
p = arr; // указателю p присвоить адрес 0-го элемента массива
*arr = 2; // нулевому элемент массива присвоить 2
arr[0] = 2; // то же самое
*p = 2; // - * -
*(arr+0) = 2; // - * -
p[0] = 2; // - * -
*(arr+16) = 3; // 16-му элементу массива присвоить 3
int i = 5;
*(arr+i+2) = 1; // 7-му элементу присвоить 1
[7]arr = 1; // - * -
18 Указатели на многомерные массивы. Выражения вида *ptr++, *++ptr, ++*ptr, (*ptr)++.
Указатели на многомерные массивы
Указатели на многомерные массиве в языке C являются по сути массивами массивов. При объявлении таких массивов в памяти создаётся несколько разных объектов. Например, объявление
int arr[4][3];
порождает 3 разных объекта:
1) указатель с идентификатором arr,
2) безымянный массив из 4 указателей,
3) безымянный массив из 12 чисел типа int.
19 Массивы указателей типа char(указатели и строки). Инициализация символьных массивов. Действия оператора «*».
Массивы указателей типа char (указатели и строки)
Инициализация символьного массива:
char b[8] = “student”;
char b[8] = {‘s’, ‘t’, ‘u’, ‘d’, ‘e’, ‘n’, ‘t’, ‘\0’};
Если при объявлении массива происходит его инициализация, компилятор сам вычисляет его длину по длине строки.
Следующий оператор объявляет массив из 10 указателей на строки:
char* mas[10] = {“one”, “two”, “three”, …}; // (*)
Оператор (*) выполняет следующие действия:
Размешает в памяти массив из 10 элементов с именем mas. Каждый элемент массива является указателем типа char.
Выделяет пространство в памяти (где именно – определяет компилятор) и размещает в нём заданные строки, каждая из которых завершается 0-терминатором.
Инициализируются указатели mas[0], mas[1], mas[2] – адреса первых символов соответствующих строк. Элементы массива mas[3..9] не инициализируются никакими адресами