Предыдущая глава объясняла стандартные устройства ввода и вывода, обрабатываемые языком программирования C. Эта глава охватывает, как программисты на C могут создавать, открывать, закрывать текстовые или бинарные файлы для своего хранилища данных. Файл представляет собой последовательность байтов, н
Концепция потоков (streams) В C все устройства ввода-вывода представлены как потоки байтов. Три стандартных потока открываются автоматически при запуске программы: ПотокФайловый указательУстройство по умолчаниюНазначение Стандартный вводstdin (FILE*)КлавиатураЧтение данных Стандартный выводstdoutЭ
Что такое typedef? typedef — ключевое слово С для создания псевдонима (алиаса) существующего типа. Не создаёт новый тип, а даёт альтернативное имя. Обрабатывается компилятором (в отличие от препроцессорного #define). Базовый синтаксис typedef существующий_тип новое_имя; Правило: напишите объявление
Зачем нужны битовые поля? Битовые поля (bit fields) позволяют упаковать несколько небольших целочисленных значений в одно машинное слово, экономя память. Часто используются для: Флагов (boolean: 0/1) — 1 бит каждый. Малых целых (0-7, 0-15 и т.д.) — 3, 4 бита. Сетевых протоколов, файловых форматов,
Что такое объединение (union)? Объединение — пользовательский тип, позволяющий хранить разные типы данных в одной и той же области памяти. В любой момент времени активно только одно поле. Размер объединения = размер самого большого поля (с учётом выравнивания). Объявление и определение union Data {
Что такое структура? Структура (struct) — пользовательский тип, объединяющий переменные разных типов под одним именем. Позволяет моделировать записи (records) — сущности с несколькими атрибутами. Объявление и определение // Тег структуры: struct Book struct Book { char title[100]; char auth
Что такое строка в C? В C нет встроенного строкового типа. Строка — это массив char, заканчивающийся нуль-терминатором \0 (код 0). Длина строки = количество символов до терминатора. char str1[6] = {H, e, l, l, o, \0}; // явная инициализация char str2[] = Hello; // неявный \0
Что такое указатель? Указатель (pointer) — переменная, хранящая адрес другой переменной в памяти. Позволяет косвенный доступ к данным, работу с динамической памятью, эффективную передачу больших структур в функции и построение сложных структур данных (списки, деревья, графы). Объявление и базовые о
Что такое массив? Массив — непрерывная область памяти, хранящая фиксированное число элементов одного типа. Элементы доступны по индексу (0-базированный). Ключевые свойства: Размер фиксирован на этапе компиляции (кроме VLA — C99). Элементы лежат подряд в памяти: &arr[i+1] == &arr[i] + sizeof
Что такое область видимости (scope)? Область видимости — часть программы, где идентификатор (имя переменной/функции) доступен для использования. В C есть 4 вида областей видимости: ОбластьГде виднаПример Блок (block)Внутри { ... } где объявленаЛокальные переменные, параметры Файл (file)Во всем фай
Что такое функция? Функция — именованный блок кода, выполняющий определённую задачу. Позволяет декомпозировать программу, избегать дублирования, улучшать читаемость и тестируемость. Каждая C-программа начинается с функции main(). Синтаксис: объявление vs определение // Объявление (прототип) — обычн
Зачем нужны циклы Циклы позволяют выполнять блок кода многократно. В C есть три основных вида циклов и операторы для управления их выполнением. 1. Цикл while — с предусловием Условие проверяется перед каждой итерацией. Если ложно с начала — тело не выполняется ни разу. while (условие) { // тело
Логические значения в C В C нет встроенного типа bool до C99 (<stdbool.h>). Любое не-нулевое значение — истина (true), ноль или NULL — ложь (false). Результаты операций сравнения и логических — int (1 или 0). Оператор if Простая форма if (условие) оператор; // один оператор // и
Классификация операторов Операторы в C делятся на категории по функции и количеству операндов: Унарные — 1 операнд (++, --, !, ~, +, -, * (разыменование), & (адрес), sizeof). Бинарные — 2 операнда (арифметические, сравнения, логические, битовые, присваивания). Тернарный — 3 операнда (?:). Ари
Что такое класс хранения? Класс хранения (storage class) определяет: Область видимости (scope) — где в коде имя доступно. Время жизни (lifetime) — когда память выделяется и освобождается. Линковку (linkage) — видно ли имя другим файлам компиляции. Место хранения — стек, регистр, сегмент данных (BSS
Что такое константы и литералы? Литерал — это запись фиксированного значения в коде (42, 3.14, A, Hello). Константа — именованное значение, которое не меняется во время выполнения. В C константы создаются через #define или const. Целочисленные литералы Могут быть в 3 системах счисления: ОснованиеП
Что такое переменная? Переменная — именованная область памяти, которая хранит значение определённого типа. Имя переменной — это идентификатор, связанный с адресом в памяти. Объявление vs Определение Объявление (declaration) — сообщает компилятору: «существует переменная такого типа с таким именем»
Классификация типов Система типов C делится на 4 основные категории: КатегорияОписаниеПримеры Базовые (арифметические)Целые и вещественные числаint, float, double, char Перечислимые (enum)Именованные целочисленные константыenum Color {RED, GREEN} VoidОтсутствие типаvoid (функции без возврата, указ
Токены (лексемы) Токен — наименьшая значимая единица программы. В C токены делятся на 5 категорий: КатегорияПримеры Ключевые словаint, return, if, while, struct... Идентификаторыmain, count, _temp, MAX_SIZE Константы (литералы)42, 3.14, A, Hello, 0xFF Строковые литералыHello, World!\n Символы-разд
Минимальная структура программы Любая C-программа состоит из: Директив препроцессора — #include, #define, #ifdef... Функций — минимум одна: main(). Переменных — объявления и определения. Выражений и операторов — вычисления, присваивания, вызовы. Комментариев — // или /* */. Разбор Hello World #in
Язык C