- •Види програмного забезпечення. Операційні системи. Види файлів. Прикладне програмне забезпечення.
- •Типи даних. Ціли типи даних та їх особливості.
- •Дані з рухомою крапкою та їх особливості.
- •Ключові слова, які використовуються для визначення даних. Одиночні дані та масиви.
- •Засоби ініціювання даних під час опису. Засоби визначення текстових рядків.
- •Структура програмного тексту. Структуризація програм "Си".
- •Що таке "вираження" мові "Си". Особливості формування результатів виражень.
- •Оператори "for", "while", "do … while".
- •Оператори "if", "else".
- •Оператори "goto" и "switch".
- •Основні відомості про функції в "Си".
- •Препроцесор "Си".
- •Повертання значень функціями.
- •Статичні та регістрові змінні.
- •Рекурсія в "Си".
- •Основні відмінності покажчиків від звичайних зміних. Структура та формат покажчиків.
- •Покажчики на функції. Покажчики і аргументи функцій.
- •Масиви структур. Покажчики на структури.
- •Основні відмінності об'єкту від структури. Переваги об'єктно-оріентованої технології програмування над традиційними технологіями.
- •Основні принципи проектування програм, в разі використання об'єктно-оріентованої технології програмування.
- •Опис класу. Клас - шаблон об'єкту.
- •Конструктори та деструктори. Визначення функцій-членів класів.
- •Об'єкт - екземпляр класу. Ініціалізація покажчиків на об'єкти. Знищення об'єктів.
- •Засоби регулювання доступу до внутриоб'єктних змінних та процедур (загальнодоступні, захищені та власні змінні).
- •Успадкування змінних та процедур. Визначення класів-спадкоємців. Деяки особливості успадкування.
- •Використання однакових імен процедур для реалізації різних алгоритмів, в залежності від типів вхідних даних та результату аналізу.
- •Перевантаження операцій.
- •Загальні принципи проектування windows-програм.
- •Програмування подій.
Статичні та регістрові змінні.
Переменные бывают локальными и глобальными, локальные делятся на статические и автоматические.
Класс памяти определяет время жизни объекта и место его размещения в памяти (относительно границ сегмента памяти, выделенного для программы в целом).
Существует 4 класса памяти: static (статический), extern (внешний), auto (автоматический), register (регистровый).
Объекты, имеющие класс памяти static, существуют (занимают место в памяти) в течение всего времени работы программы. Их место в памяти определяется на этапе компиляции. К ним по умолчанию относятся глобальные переменные.
Объекты, имеющие класс памяти auto, существуют (занимают место в памяти) лишь во время выполнения блока, в котором объявлены. К ним по умолчанию относятся локальные переменные. Память для них выделяется при входе в блок в пределах определенной области, называемой программным стеком. После выхода из блока таким образом, ограничен; в большинстве компиляторов по умолчанию (если не менять настроек) он равен всего лишь 1 мегабайт.
При любом вызове функции в программном стеке размещаются ее параметры, а также сохраняется содержимое регистров процессора на момент, предшествующий вызову функции, и адрес возврата из функции для того, чтобы занимаемая ими память освобождается и может быть использована для других автоматических переменных. Это позволяет экономить память, а также осуществлять рекурсию (при вызове функцией самой себя создается новая копия всех ее автоматических переменных). Но это приводит к тому, что при повторном входе в блок значение, ранее присвоенное переменной, теряется.
Кроме того, общий размер стека должен быть задан на этапе компиляции и,
при выходе из нее можно было продолжить выполнение вызывающей функции.
Класс памяти extern похож на static, но означает, что объект объявлен позже в этом или другом файле (см. ниже). Он может применяться к глобальным переменным.
Класс памяти register похож на auto; но он рекомендует компилятору разместить (если возможно) переменную не в стеке, а непосредственно в регистрах процессора. Регистровая память позволяет увеличить быстродействие программы, но к размещаемым в ней объектам в языке Си (но не С++) не применима операция получения адреса «&».
Рекурсія в "Си".
Функция называется рекурсивной, если во время ее обработки возникает ее повторный вызов, либо непосредственно, либо косвенно, путем цепочки вызовов других функций.
Обычно, в программировании под рекурсией понимают такую реализацию, в которой подпрограмма использует в своем теле вызов самой себя. Такие вызовы называют рекурсивными. Когда функция A в своем теле вызывает только одну рекурсивную функцию (саму себя), то говорят о простой рекурсии. Под косвенной рекурсией понимают явление, когда рекурсивные функции вызывают друг друга (например, функция А вызывает B, а функция B вызывает A).
Основні відмінності покажчиків від звичайних зміних. Структура та формат покажчиків.
Указатель – это переменная, которая может содержать адрес некоторого объекта. Простейшая декларация указателя имеет формат:
тип * ID_указателя;
Например: int *a; double *f; char *w;
Здесь тип может быть любым кроме ссылки или битового поля, причем тип может быть к этому моменту только декларирован, но еще не определен (следовательно, в структуре, например, может присутствовать указатель на структуру того же типа).
Символ «звездочка» относится непосредственно к ID указателя, поэтому для того, чтобы декларировать несколько указателей, ее нужно записывать перед именем каждого из них.
Например, в декларации:
int *a, *b, с;
определены два указателя на участки памяти для целочисленных данных, а также обычная целочисленная переменная с.
Значение указателя равно номеру первого байта участка памяти, на который он ссылается.
Указатель может быть константой или переменной, а также указывать на константу или переменную.
С указателями-переменными связаны две унарные операции & и *.
Операция & означает «взять адрес» операнда. Операция * имеет смысл – «значение, расположенное по указанному адресу» (операция разадресации).
Таким образом, обращение к объектам любого типа как операндам операций в языке Cи может производиться:
по имени (идентификатору);
по указателю (операция косвенной адресации):
