Как работает и не работает обобщённый указатель void * в C (Си)
Автор: Olga Pavlova
Загружено: 2025-01-31
Просмотров: 3074
Описание:
void * — особый указатель. Он может то, чего не может никто — и не может то, что могут все. Как нам это поможет и при чём тут функциональное программирование? Обсудим и покодим.
ВНИМАНИЕ: ошибка в коде функции free_regmem() — и по ходу стрима её не обнаружили. А это важно. Потерян инкремент p. Должно быть p++ в конце блока while.
Таймлайн:
00:06 – Введение, продолжение изучения Си
00:26 – Рефлексия о предыдущей теме
00:48 – Поведение отдельно от данных, функциональное программирование
01:41 – Переход к новой теме: обобщённый указатель
02:55 – Что значит «обобщённый» в программировании
04:06 – Универсальные функции и обобщение типов
05:16 – Массивы как пример обобщённой структуры
06:10 – Стандартная библиотека и справка
06:59 – Обработка произвольного числа параметров
07:56 – Указатели и ссылки на функции
08:45 – Хочется универсальности – зачем нужен обобщённый указатель
09:37 – Основная проблема: указатель – это адрес
11:00 – Пояснение: указатель как длинная полка
12:38 – Память и тип — разные вещи
14:45 – Почему указатели опасны и что мы с ними можем
16:21 – Использование указателей для изменения данных вне функции
17:56 – Визуализация указателей
20:13 – Эксперимент: если оторвать тип от указателя
21:29 – Появление void* как универсального указателя
23:38 – Абстрагирование: указатель не знает про содержимое
24:41 – Конфликт: функции требуют типы, а нам нужна универсальность
25:54 – Макросы и generic-функции не подходят для обратных вызовов
27:03 – Функции высшего порядка и обобщённые указатели
29:36 – void* – указатель на что угодно
32:02 – Пример: функция, создающая строку из символа через void*
36:08 – Работа с void* внутри функции
38:25 – Возвращаем результат как обобщённый указатель
40:14 – Демонстрация использования функции с обобщёнными указателями
44:49 – Печать строк из void*
47:00 – Всё работает: универсальность достигнута
47:52 – Переход к более насущной задаче: сборщик мусора
50:16 – Создание регистра выделенной памяти
52:05 – Объявление массива обобщённых указателей
54:05 – Функция для добавления указателя в регистр
56:03 – Проблемы типизации и как их решить
57:32 – Убедимся, что всё работает
1:00:13 – Использование функции exit и вызов очистки памяти
1:02:03 – Реализация функции очистки памяти
1:06:00 – Ошибка: нельзя разыменовывать void*, решение
1:07:04 – Всё работает, память очищается
1:08:26 – Проверка утечек памяти
1:12:22 – Главное: void* позволяет не думать о типах
1:13:14 – Схема работы обобщённой функции
1:14:21 – Подводка к задаче с аргументами в функциях высшего порядка
1:15:55 – Аргументы функции обратного вызова и суммирование
1:17:09 – Промежуточная функция для упаковки аргументов
1:18:25 – Заключение, благодарности и планы
Конспект: https://github.com/olgapavlova/lectur...
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: