Языки программирования

Учебник Язык C с нуля для начинающих

23 урока · 6 разделов · бесплатно, без регистрации

Премиум-курс по языку C — от самой первой программы до ручного управления памятью, указателей и структур данных. Вы не просто выучите синтаксис, а поймёте, что происходит в памяти на каждом шаге: как устроены стек и куча, как работают указатели и адреса, почему возникают переполнение буфера и утечки памяти и как писать безопасный код по современным практикам C11/C17.

Курс построен вокруг наглядных ASCII-диаграмм памяти и запускаемых примеров: поскольку C не исполняется в браузере, ключевую логику мы дублируем на Python, чтобы вы могли пощупать её прямо здесь. К концу вы будете уверенно работать с указателями, динамической памятью, строками и структурами и применять инструменты вроде valgrind и AddressSanitizer.

Курс «Язык C с нуля» состоит из 6 разделов и 23 уроков: Основы C, Операторы и управление, Функции, Указатели, Массивы и строки и Структуры и память. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Основы C

    1. Что такое язык C и зачем он нужен

      Знакомство с языком C: история, область применения, почему он до сих пор фундамент всего системного программирования.

    2. Первая программа: компиляция и запуск

      Пишем и компилируем первую программу на C, разбираем main, include, printf и команду gcc по шагам.

    3. Переменные и базовые типы данных

      Целые, вещественные и символьные типы в C, объявление переменных, размеры типов и почему в C тип важен как нигде.

    4. Ввод-вывод: printf и scanf

      Форматированный вывод printf и ввод scanf, спецификаторы формата, главная опасность scanf и как читать данные безопасно.

  2. 2 Операторы и управление

    1. Арифметические и логические операторы

      Операторы C: арифметика, целочисленное деление и остаток, сравнение, логика, инкремент. Главные ловушки приоритета и деления.

    2. Условные операторы: if, else, switch

      Ветвление в C: if/else if/else, тернарный оператор, switch с break. Почему отсутствие break приводит к проваливанию.

    3. Циклы: for, while, do-while

      Три вида циклов C, их устройство и выбор, операторы break и continue, классические ошибки вроде бесконечного цикла и off-by-one.

  3. 3 Функции

    1. Объявление и вызов функций

      Функции в C: определение, параметры, возвращаемое значение, зачем нужны прототипы и как организован вызов.

    2. Передача аргументов: по значению

      Главный принцип C: аргументы передаются по значению (копией). Почему функция не может изменить переменную вызывающего без указателя.

    3. Область видимости и время жизни переменных

      Локальные, глобальные и static-переменные в C, разница между областью видимости и временем жизни, где живут переменные в памяти.

    4. Рекурсия в C

      Рекурсивные функции в C, базовый случай и шаг рекурсии, стек вызовов, опасность переполнения стека и когда рекурсия оправдана.

  4. 4 Указатели

    1. Что такое указатель и адрес

      Указатели в C с нуля: адрес переменной, оператор &, разыменование *, объявление указателя. Самая важная тема языка.

    2. Указатели и функции: изменяем аргументы

      Передача указателей в функции, чтобы менять переменные вызывающего. Классический пример swap. Возврат нескольких значений через указатели.

    3. Указатели и арифметика адресов

      Арифметика указателей в C, как p+1 учитывает размер типа, связь указателей и массивов, проход по данным через указатель.

    4. Динамическая память: malloc и free

      Ручное управление памятью в C: malloc, calloc, realloc и free, куча против стека, утечки памяти и use-after-free.

  5. 5 Массивы и строки

    1. Одномерные массивы

      Массивы в C: объявление, индексация, расположение в памяти, отсутствие проверки границ и как безопасно работать с длиной.

    2. Строки как массивы символов

      Строки в C — это массивы char с нуль-терминатором. Зачем нужен символ нуля, как устроены строковые литералы, чем опасны строки.

    3. Стандартные функции работы со строками

      Библиотека string.h: strlen, strcpy, strcat, strcmp и их безопасные версии. Почему strcpy опасна и чем её заменить.

    4. Многомерные массивы

      Двумерные массивы в C: объявление матриц, расположение по строкам в памяти, доступ по двум индексам, обход вложенными циклами.

  6. 6 Структуры и память

    1. Структуры: объединяем данные

      Структуры struct в C: объявление, доступ к полям, расположение в памяти, выравнивание и padding, структуры как параметры функций.

    2. Указатели на структуры и оператор стрелки

      Указатели на структуры в C, оператор стрелки как сокращение для разыменования с полем, динамические структуры через malloc, основа связных структур данных.

    3. Перечисления, typedef и объединения

      Производные типы C: enum для именованных констант, typedef для псевдонимов типов, union для разделяемой памяти. Когда что применять.

    4. Управление памятью и безопасный C

      Итоговый урок: модель памяти C целиком, классы уязвимостей, инструменты valgrind и AddressSanitizer, чеклист безопасного программирования на C.