В книге рассказывается о языке C и стандартной библиотеке C, следуя девизу компании Deitel: «обучение на действующих примерах». Понятия представляются в контексте тщательно протестированных программ, с выделением синтаксиса, демонстрацией вывода программ и подробного их обсуждения. Приводится примерно 5 000 строк кода на языке C и даются сотни полезных советов, которые помогут вам создавать надежные приложения. Рассматривается создание собственных структур данных и стандартная библиотека, безопасное программирование на C; описываются особенности новой ревизии стандарта С11, в т. ч. многопоточность. Закончив чтение, вы будете иметь все знания, необходимые для создания приложений на языке C промышленного уровня. Издание предназначено программистам, имеющим опыт работы на
высокоуровневых языках.
Предисловие ....................................................................................................15
1 Введение .....................................................................................................23
1.1 Введение ..............................................................................................................24
1.2 Язык программирования C .............................................................................24
1.3 Стандартная библиотека .................................................................................26
1.4 C++ и другие C-подобные языки .................................................................27
1.5 Типичная среда разработки приложений на языке C .............................28
1.5.1 Фаза 1: создание программы ...............................................................29
1.5.2 Фазы 2 и 3: препроцессинг и компиляция программы ................30
1.5.3 Фаза 4: компоновка ................................................................................30
1.5.4 Фаза 5: загрузка .......................................................................................31
1.5.5 Фаза 6: выполнение ...............................................................................31
1.5.6 Потоки стандартного ввода, стандартного вывода
и стандартного вывода ошибок ..........................................................31
1.6 Пробное приложение на языке C для Windows, Linux и Mac OS X ....32
1.6.1 Запуск приложения из командной строки в Windows .................33
1.6.2 Запуск приложения в Linux .................................................................36
1.6.3 Запуск приложения в Mac OS X.........................................................39
1.7 Операционные системы ..................................................................................42
1.7.1 Windows – коммерческая операционная система ..........................42
1.7.2 Linux – открытая операционная система .........................................42
1.7.3 Apple Mac OS X, Apple iOS® для устройств iPhone®, iPad®
и iPod Touch® ...........................................................................................43
1.7.4 Google Android ........................................................................................44
2 Введение в программирование на C ..............................45
2.1 Введение ..............................................................................................................46
2.2 Простая программа на C: вывод строки текста .........................................46
2.3 Еще одна простая программа на C: сложение двух целых чисел ..........51
2.4 Арифметические операции в языке C............................................................. 56
2.5 Принятие решений: операторы сравнения ................................................60
2.6 Безопасное программирование на C ...........................................................65
Содержание 7
3 Управляющие инструкции: часть I ..................................67
3.1 Введение ..............................................................................................................68
3.2 Управляющие структуры ................................................................................68
3.3 Инструкция выбора if .....................................................................................70
3.4 Инструкция выбора if...else ............................................................................71
3.5 Инструкция повторения while ......................................................................75
3.6 Определение средней оценки с помощью инструкции
повторения, управляемой счетчиком ...........................................................76
3.7 Определение средней оценки с помощью инструкции
повторения, управляемой сигнальным значением ...................................77
3.8 Вложенные управляющие инструкции ........................................................... 81
3.9 Операторы присваивания ...............................................................................84
3.10 Операторы инкремента и декремента .........................................................85
3.11 Безопасное программирование на C ...........................................................87
4 Управляющие инструкции: часть II ................................91
4.1 Введение ..............................................................................................................92
4.2 Основы повторения..........................................................................................92
4.3 Повторение со счетчиком ..............................................................................93
4.4 Инструкция повторения for ...........................................................................95
4.5 Инструкция for: замечания .............................................................................98
4.6 Примеры использования инструкции for .................................................99
4.7 Инструкция множественного выбора switch ..........................................103
4.8 Инструкция повторения do…while ............................................................110
4.9 Инструкции break и continue ......................................................................112
4.10 Логические операторы ..................................................................................114
4.11 Путаница между операторами равенства (==) и присваивания (=) .....118
4.12 Безопасное программирование на C .........................................................120
5 Функции .................................................................................................122
5.1 Введение ............................................................................................................123
5.2 Модульное программирование на языке C ..............................................123
5.3 Функции из математической библиотеки ................................................125
5.4 Функции .............................................................................................................126
5.5 Определение функций ..................................................................................127
5.6 Прототипы функций: обсуждение деталей .............................................132
5.7 Стек вызовов функций и кадры стека ........................................................135
5.8 Заголовочные файлы .....................................................................................138
5.9 Передача аргументов по значению и по ссылке ....................................141
8 Содержание
5.10 Генератор случайных чисел .........................................................................141
5.11 Пример: игра в кости .....................................................................................147
5.12 Классы хранения .............................................................................................151
5.13 Правила видимости ........................................................................................153
5.14 Рекурсия .............................................................................................................157
5.15 Пример использования рекурсии: числа Фибоначчи ...........................161
5.16 Рекурсия и итерации ......................................................................................165
5.17 Безопасное программирование на C .........................................................167
6 Массивы..................................................................................................168
6.1 Введение ............................................................................................................169
6.2 Массивы .............................................................................................................169
6.3 Определение массивов ..................................................................................171
6.4 Примеры массивов ..........................................................................................171
6.5 Передача массивов функциям .....................................................................185
6.6 Сортировка массивов .....................................................................................190
6.7 Пример: вычисление математического ожидания, медианы
и моды ................................................................................................................193
6.8 Поиск в массивах .............................................................................................197
6.9 Многомерные массивы ..................................................................................203
6.10 Массивы переменной длины ........................................................................210
6.11 Безопасное программирование на C .........................................................213
7 Указатели ................................................................................................216
7.1 Введение ............................................................................................................217
7.2 Переменные-указатели, определение и инициализация ......................217
7.3 Операторы указателей ...................................................................................219
7.4 Передача аргументов функциям по ссылке..............................................221
7.5 Использование квалификатора const с указателями .............................224
7.5.1 Преобразование строк в верхний регистр с использованием
изменяемого указателя на изменяемые данные ...........................227
7.5.2 Вывод строки по одному символу с использованием
изменяемого указателя на константные данные ...........................228
7.5.3 Попытка изменить константный указатель на изменяемые
данные .....................................................................................................231
7.5.4 Попытка изменить константный указатель на константные
данные .....................................................................................................231
7.6 Пузырьковая сортировка с передачей аргументов по ссылке .............232
7.7 Оператор sizeof ...............................................................................................236
7.8 Выражения с указателями и арифметика указателей .............................238
Содержание 9
7.9 Связь между указателями и массивами.......................................................242
7.10 Массивы указателей ........................................................................................246
7.11 Пример: тасование и раздача карт ..............................................................247
7.12 Указатели на функции ...................................................................................251
7.13 Безопасное программирование на C .........................................................256
8 Символы и строки.........................................................................258
8.1 Введение ............................................................................................................259
8.2 Основы работы со строками и символами ...............................................259
8.3 Библиотека функций для работы с символами ......................................262
8.3.1 Функции isdigit, isalpha, isalnum и isxdigit ......................................263
8.3.2 Функции islower, isupper, tolower и toupper ...................................265
8.3.3 Функции isspace, iscntrl, ispunct, isprint и isgraph .........................266
8.4 Функции преобразования строк ..................................................................268
8.4.1 Функция strtod.......................................................................................268
8.4.2 Функция strtol ........................................................................................269
8.4.3 Функция strtoul......................................................................................270
8.5 Стандартная библиотека ввода/вывода.....................................................271
8.5.1 Функции fgets и putchar ......................................................................271
8.5.2 Функция getchar ....................................................................................274
8.5.3 Функция sprintf .....................................................................................274
8.5.4 Функция sscanf ......................................................................................275
8.6 Функции для работы со строками .............................................................276
8.6.1 Функции strcpy и strncpy ....................................................................277
8.6.2 Функции strcat и strncat ......................................................................278
8.7 Функции сравнения строк .............................................................................279
8.8 Функции поиска в строках ............................................................................281
8.8.1 Функция strchr .......................................................................................282
8.8.2 Функция strcspn ....................................................................................282
8.8.3 Функция strpbrk ....................................................................................283
8.8.4 Функция strrchr .....................................................................................283
8.8.5 Функция strspn ......................................................................................284
8.8.6 Функция strstr ........................................................................................285
8.8.7 Функция strtok .......................................................................................285
8.9 Функции для работы с памятью ..................................................................287
8.9.1 Функция memcpy ..................................................................................288
8.9.2 Функция memmove ..............................................................................288
8.9.3 Функция memcmp ................................................................................289
8.9.4 Функция memchr ..................................................................................290
8.9.5 Функция memset ...................................................................................290
10 Содержание
8.10 Прочие функции для работы со строками ..............................................291
8.10.1 Функция strerror ..................................................................................291
8.10.2 Функция strlen .....................................................................................292
8.11 Безопасное программирование на C ........................................................292
9 Форматированный ввод/вывод ...................................... 294
9.1 Введение ............................................................................................................295
9.2 Потоки данных ................................................................................................295
9.3 Форматированный вывод с помощью printf ...........................................296
9.4 Вывод целых чисел .........................................................................................296
9.5 Вывод вещественных чисел ..........................................................................298
9.6 Вывод строк и символов ...............................................................................300
9.7 Прочие спецификаторы формата ..............................................................301
9.8 Вывод с указанием ширины поля и точности .........................................302
9.9 Использование флагов в строке формата функции printf ................305
9.10 Вывод литералов и экранированных последовательностей ................307
9.11 Чтение форматированного ввода с помощью функции scanf ..........308
9.12 Безопасное программирование на C .........................................................315
10 Структуры, объединения, перечисления
и поразрядные операции .......................................................316
10.1 Введение ............................................................................................................317
10.2 Определение структур ...................................................................................318
10.2.1 Структуры со ссылками на самих себя ..........................................318
10.2.2 Определение переменных структурных типов ..........................319
10.2.3 Имена структур ...................................................................................319
10.2.4 Операции над структурами .............................................................320
10.3 Инициализация структур ..............................................................................321
10.4 Доступ к полям структур ...............................................................................321
10.5 Передача структур функциям ......................................................................323
10.6 typedef ................................................................................................................324
10.7 Пример: высокопроизводительная программа перемешивания
и раздачи колоды карт ...................................................................................325
10.8 Объединения ....................................................................................................327
10.8.1 Объявление объединений ...............................................................328
10.8.2 Операции над объединениями .......................................................328
10.8.3 Инициализация объединений в объявлениях ............................328
10.8.4 Демонстрация объединений ...........................................................329
10.9 Поразрядные операторы ...............................................................................330
10.9.1 Вывод целых чисел без знака в двоичном представлении ......331
Содержание 11
10.9.2 Повышение переносимости и масштабируемости
функции displayBits ...........................................................................333
10.9.3 Поразрядные операторы «И», «ИЛИ», исключающее
«ИЛИ» и дополнение .......................................................................334
10.9.4 Использование операторов поразрядного сдвига влево
и вправо ...............................................................................................337
10.9.5 Операторы поразрядного присваивания .....................................339
10.10 Битовые поля .................................................................................................340
10.11 Константы-перечисления ...........................................................................343
10.12 Безопасное программирование на C .......................................................345
11 Файлы .....................................................................................................347
11.1 Введение ..........................................................................................................348
11.2 Файлы и потоки данных .............................................................................348
11.3 Создание файла с последовательным доступом ..................................349
11.4 Чтение данных из файла с последовательным доступом ..................355
11.5 Произвольный доступ к файлам ..............................................................360
11.6 Создание файла с произвольным доступом .........................................361
11.7 Запись данных в файл с произвольным доступом ..............................363
11.8 Чтение данных из файла с произвольным доступом .........................366
11.9 Пример: реализация программы для работы со счетами ...................368
11.10 Безопасное программирование на C .......................................................373
12 Структуры данных .....................................................................375
12.1 Введение ..........................................................................................................376
12.2 Структуры, ссылающиеся на себя самих ................................................377
12.3 Динамическое выделение памяти ............................................................377
12.4 Связанные списки .........................................................................................379
12.4.1 Функция insert ...................................................................................385
12.4.2 Функция delete ..................................................................................387
12.4.3 Функция printList .............................................................................388
12.5 Стеки ................................................................................................................388
12.5.1 Функция push ....................................................................................392
12.5.2 Функция pop ......................................................................................393
12.5.3 Области применения стеков .........................................................394
12.6 Очереди ...........................................................................................................395
12.6.1 Функция enqueue ..............................................................................399
12.6.2 Функция dequeue ..............................................................................400
12.7 Деревья ............................................................................................................401
12.7.1 Функция insertNode .........................................................................405
12 Содержание
12.7.2 Обход дерева: функции inOrder, preOrder и postOrder ........406
12.7.3 Удаление дубликатов ......................................................................407
12.7.4 Поиск в двоичных деревьях ..........................................................407
12.8 Безопасное программирование на C .......................................................407
13 Препроцессор ................................................................................409
13.1 Введение ..........................................................................................................410
13.2 Директива препроцессора #include ........................................................410
13.3 Директива препроцессора #defi ne: символические константы .......411
13.4 Директива препроцессора #defi ne: макросы ........................................412
13.5 Условная компиляция .................................................................................414
13.6 Директивы препроцессора #error и #pragma .....................................416
13.7 Операторы # и ## .....................................................................................416
13.8 Номера строк .................................................................................................417
13.9 Предопределенные символические константы ....................................418
13.10 Утверждения ..................................................................................................418
13.11 Безопасное программирование на C .....................................................419
14 Разное ......................................................................................................420
14.1 Введение ..........................................................................................................421
14.2 Перенаправление ввода/вывода ...............................................................421
14.3 Функции с переменным количеством аргументов ...............................422
14.4 Использование аргументов командной строки ....................................425
14.5 Замечания о компиляции программ из нескольких исходных
файлов .............................................................................................................426
14.6 Завершение выполнения программ с помощью функций exit
и atexit ..............................................................................................................429
14.7 Окончания в литералах целых и вещественных чисел ......................430
14.8 Обработка сигналов .....................................................................................431
14.9 Динамическое выделение памяти: функции calloc и realloc .............433
14.10 Безусловные переходы с помощью goto ...............................................434
А Таблица предшествования операторов ................ 437
В Набор символов ASCII ........................................................... 439
С Системы счисления .................................................................. 440
C.1 Введение ..........................................................................................................441
C.2 Преобразование двоичных чисел в восьмеричное
и шестнадцатеричное представление .....................................................444
Содержание 13
C.3 Преобразование восьмеричных и шестнадцатеричных чисел
в двоичное представление ............................................................................446
C.4 Преобразование двоичных, восьмеричных
и шестнадцатеричных чисел в десятичное представление ..................446
C.5 Преобразование десятичных чисел в двоичное, восьмеричное
и шестнадцатеричное представление ........................................................447
C.6 Отрицательные двоичные числа: нотация дополнения до двух .......449
D Сортировка: взгляд в глубину ............................................451
D.1 Введение ............................................................................................................452
D.2 Нотация «Большое О» ...................................................................................452
D.3 Сортировка методом выбора........................................................................454
D.4 Сортировка методом вставки .......................................................................457
D.5 Сортировка методом слияния ......................................................................461
E Дополнительные особенности стандарта C ........ 468
E.1 Введение ............................................................................................................469
E.2 Поддержка положений ревизии C99 .........................................................470
E.3 Заголовочные файлы в C99 ........................................................................470
E.4 Включение объявлений в выполняемый код ..........................................471
E.5 Объявление переменных в заголовках инструкций for ........................472
E.6 Назначенные инициализаторы и составные литералы ........................473
E.7 Тип bool .............................................................................................................476
E.8 Неявный тип int в объявлениях функций ................................................477
E.9 Комплексные числа ........................................................................................479
E.10 Массивы переменной длины ........................................................................480
E.11 Дополнительные возможности препроцессора .....................................483
E.12 Другие особенности, определяемые ревизией C99 ..............................485
E.12.1 Минимальные требования компилятора к ресурсам .............485
E.12.2 Ключевое слово restrict ................................................................485
E.12.3 Надежное целочисленное деление ...........................................486
E.12.4 Гибкие члены-массивы .................................................................486
E.12.5 Ослабление ограничений в составных
инициализаторах ............................................................................487
E.12.6 Математические операции обобщенного типа .....................487
E.12.7 Встраиваемые функции ................................................................488
E.12.8 Инструкция return без выражения ..............................................488
E.12.9 Предопределенный идентификатор __func__ ......................488
E.12.10 Макрос va_copy ...............................................................................489
E.13 Новые особенности в ревизии C11 ...........................................................489
14 Содержание
E.13.1 Новые заголовочные файлы в C11 .............................................489
E.13.2 Поддержка многопоточной модели выполнения ..................490
E.13.3 Функция quick_exit ..........................................................................498
E.13.4 Поддержка Unicode® .......................................................................498
E.13.5 Спецификатор функций _Noreturn ...........................................499
E.13.6 Выражения обобщенного типа ...................................................499
E.13.7 Annex L: анализируемость и неопределенное поведение ....499
E.13.8 Анонимные структуры и объединения .....................................500
E.13.9 Управление выравниванием в памяти .......................................501
E.13.10 Статические утверждения ..............................................................501
E.13.11 Вещественные типы .......................................................................501
E.14 Веб-ресурсы ......................................................................................................501
F Отладчик Visual Studio ..............................................................505
F.1 Введение ............................................................................................................506
F.2 Точки останова и команда Continue...........................................................506
F.3 Окна Locals и Watch ......................................................................................511
F.4 Управление выполнением с помощью команд Step Into,
Step Over, Step Out и Continue .....................................................................514
F.5 Окно Autos .......................................................................................................517
G Отладчик GNU ..................................................................................518
G.1 Введение ............................................................................................................519
G.2 Точки останова и команды run, stop, continue и print ...........................519
G.3 Команды print и set .........................................................................................525
G.4 Управление выполнением с помощью команд step, fi nish и next ......527
G.5 Команда watch ..................................................................................................530
Алфавитный указатель .......................................................................533
1 Введение .....................................................................................................23
1.1 Введение ..............................................................................................................24
1.2 Язык программирования C .............................................................................24
1.3 Стандартная библиотека .................................................................................26
1.4 C++ и другие C-подобные языки .................................................................27
1.5 Типичная среда разработки приложений на языке C .............................28
1.5.1 Фаза 1: создание программы ...............................................................29
1.5.2 Фазы 2 и 3: препроцессинг и компиляция программы ................30
1.5.3 Фаза 4: компоновка ................................................................................30
1.5.4 Фаза 5: загрузка .......................................................................................31
1.5.5 Фаза 6: выполнение ...............................................................................31
1.5.6 Потоки стандартного ввода, стандартного вывода
и стандартного вывода ошибок ..........................................................31
1.6 Пробное приложение на языке C для Windows, Linux и Mac OS X ....32
1.6.1 Запуск приложения из командной строки в Windows .................33
1.6.2 Запуск приложения в Linux .................................................................36
1.6.3 Запуск приложения в Mac OS X.........................................................39
1.7 Операционные системы ..................................................................................42
1.7.1 Windows – коммерческая операционная система ..........................42
1.7.2 Linux – открытая операционная система .........................................42
1.7.3 Apple Mac OS X, Apple iOS® для устройств iPhone®, iPad®
и iPod Touch® ...........................................................................................43
1.7.4 Google Android ........................................................................................44
2 Введение в программирование на C ..............................45
2.1 Введение ..............................................................................................................46
2.2 Простая программа на C: вывод строки текста .........................................46
2.3 Еще одна простая программа на C: сложение двух целых чисел ..........51
2.4 Арифметические операции в языке C............................................................. 56
2.5 Принятие решений: операторы сравнения ................................................60
2.6 Безопасное программирование на C ...........................................................65
Содержание 7
3 Управляющие инструкции: часть I ..................................67
3.1 Введение ..............................................................................................................68
3.2 Управляющие структуры ................................................................................68
3.3 Инструкция выбора if .....................................................................................70
3.4 Инструкция выбора if...else ............................................................................71
3.5 Инструкция повторения while ......................................................................75
3.6 Определение средней оценки с помощью инструкции
повторения, управляемой счетчиком ...........................................................76
3.7 Определение средней оценки с помощью инструкции
повторения, управляемой сигнальным значением ...................................77
3.8 Вложенные управляющие инструкции ........................................................... 81
3.9 Операторы присваивания ...............................................................................84
3.10 Операторы инкремента и декремента .........................................................85
3.11 Безопасное программирование на C ...........................................................87
4 Управляющие инструкции: часть II ................................91
4.1 Введение ..............................................................................................................92
4.2 Основы повторения..........................................................................................92
4.3 Повторение со счетчиком ..............................................................................93
4.4 Инструкция повторения for ...........................................................................95
4.5 Инструкция for: замечания .............................................................................98
4.6 Примеры использования инструкции for .................................................99
4.7 Инструкция множественного выбора switch ..........................................103
4.8 Инструкция повторения do…while ............................................................110
4.9 Инструкции break и continue ......................................................................112
4.10 Логические операторы ..................................................................................114
4.11 Путаница между операторами равенства (==) и присваивания (=) .....118
4.12 Безопасное программирование на C .........................................................120
5 Функции .................................................................................................122
5.1 Введение ............................................................................................................123
5.2 Модульное программирование на языке C ..............................................123
5.3 Функции из математической библиотеки ................................................125
5.4 Функции .............................................................................................................126
5.5 Определение функций ..................................................................................127
5.6 Прототипы функций: обсуждение деталей .............................................132
5.7 Стек вызовов функций и кадры стека ........................................................135
5.8 Заголовочные файлы .....................................................................................138
5.9 Передача аргументов по значению и по ссылке ....................................141
8 Содержание
5.10 Генератор случайных чисел .........................................................................141
5.11 Пример: игра в кости .....................................................................................147
5.12 Классы хранения .............................................................................................151
5.13 Правила видимости ........................................................................................153
5.14 Рекурсия .............................................................................................................157
5.15 Пример использования рекурсии: числа Фибоначчи ...........................161
5.16 Рекурсия и итерации ......................................................................................165
5.17 Безопасное программирование на C .........................................................167
6 Массивы..................................................................................................168
6.1 Введение ............................................................................................................169
6.2 Массивы .............................................................................................................169
6.3 Определение массивов ..................................................................................171
6.4 Примеры массивов ..........................................................................................171
6.5 Передача массивов функциям .....................................................................185
6.6 Сортировка массивов .....................................................................................190
6.7 Пример: вычисление математического ожидания, медианы
и моды ................................................................................................................193
6.8 Поиск в массивах .............................................................................................197
6.9 Многомерные массивы ..................................................................................203
6.10 Массивы переменной длины ........................................................................210
6.11 Безопасное программирование на C .........................................................213
7 Указатели ................................................................................................216
7.1 Введение ............................................................................................................217
7.2 Переменные-указатели, определение и инициализация ......................217
7.3 Операторы указателей ...................................................................................219
7.4 Передача аргументов функциям по ссылке..............................................221
7.5 Использование квалификатора const с указателями .............................224
7.5.1 Преобразование строк в верхний регистр с использованием
изменяемого указателя на изменяемые данные ...........................227
7.5.2 Вывод строки по одному символу с использованием
изменяемого указателя на константные данные ...........................228
7.5.3 Попытка изменить константный указатель на изменяемые
данные .....................................................................................................231
7.5.4 Попытка изменить константный указатель на константные
данные .....................................................................................................231
7.6 Пузырьковая сортировка с передачей аргументов по ссылке .............232
7.7 Оператор sizeof ...............................................................................................236
7.8 Выражения с указателями и арифметика указателей .............................238
Содержание 9
7.9 Связь между указателями и массивами.......................................................242
7.10 Массивы указателей ........................................................................................246
7.11 Пример: тасование и раздача карт ..............................................................247
7.12 Указатели на функции ...................................................................................251
7.13 Безопасное программирование на C .........................................................256
8 Символы и строки.........................................................................258
8.1 Введение ............................................................................................................259
8.2 Основы работы со строками и символами ...............................................259
8.3 Библиотека функций для работы с символами ......................................262
8.3.1 Функции isdigit, isalpha, isalnum и isxdigit ......................................263
8.3.2 Функции islower, isupper, tolower и toupper ...................................265
8.3.3 Функции isspace, iscntrl, ispunct, isprint и isgraph .........................266
8.4 Функции преобразования строк ..................................................................268
8.4.1 Функция strtod.......................................................................................268
8.4.2 Функция strtol ........................................................................................269
8.4.3 Функция strtoul......................................................................................270
8.5 Стандартная библиотека ввода/вывода.....................................................271
8.5.1 Функции fgets и putchar ......................................................................271
8.5.2 Функция getchar ....................................................................................274
8.5.3 Функция sprintf .....................................................................................274
8.5.4 Функция sscanf ......................................................................................275
8.6 Функции для работы со строками .............................................................276
8.6.1 Функции strcpy и strncpy ....................................................................277
8.6.2 Функции strcat и strncat ......................................................................278
8.7 Функции сравнения строк .............................................................................279
8.8 Функции поиска в строках ............................................................................281
8.8.1 Функция strchr .......................................................................................282
8.8.2 Функция strcspn ....................................................................................282
8.8.3 Функция strpbrk ....................................................................................283
8.8.4 Функция strrchr .....................................................................................283
8.8.5 Функция strspn ......................................................................................284
8.8.6 Функция strstr ........................................................................................285
8.8.7 Функция strtok .......................................................................................285
8.9 Функции для работы с памятью ..................................................................287
8.9.1 Функция memcpy ..................................................................................288
8.9.2 Функция memmove ..............................................................................288
8.9.3 Функция memcmp ................................................................................289
8.9.4 Функция memchr ..................................................................................290
8.9.5 Функция memset ...................................................................................290
10 Содержание
8.10 Прочие функции для работы со строками ..............................................291
8.10.1 Функция strerror ..................................................................................291
8.10.2 Функция strlen .....................................................................................292
8.11 Безопасное программирование на C ........................................................292
9 Форматированный ввод/вывод ...................................... 294
9.1 Введение ............................................................................................................295
9.2 Потоки данных ................................................................................................295
9.3 Форматированный вывод с помощью printf ...........................................296
9.4 Вывод целых чисел .........................................................................................296
9.5 Вывод вещественных чисел ..........................................................................298
9.6 Вывод строк и символов ...............................................................................300
9.7 Прочие спецификаторы формата ..............................................................301
9.8 Вывод с указанием ширины поля и точности .........................................302
9.9 Использование флагов в строке формата функции printf ................305
9.10 Вывод литералов и экранированных последовательностей ................307
9.11 Чтение форматированного ввода с помощью функции scanf ..........308
9.12 Безопасное программирование на C .........................................................315
10 Структуры, объединения, перечисления
и поразрядные операции .......................................................316
10.1 Введение ............................................................................................................317
10.2 Определение структур ...................................................................................318
10.2.1 Структуры со ссылками на самих себя ..........................................318
10.2.2 Определение переменных структурных типов ..........................319
10.2.3 Имена структур ...................................................................................319
10.2.4 Операции над структурами .............................................................320
10.3 Инициализация структур ..............................................................................321
10.4 Доступ к полям структур ...............................................................................321
10.5 Передача структур функциям ......................................................................323
10.6 typedef ................................................................................................................324
10.7 Пример: высокопроизводительная программа перемешивания
и раздачи колоды карт ...................................................................................325
10.8 Объединения ....................................................................................................327
10.8.1 Объявление объединений ...............................................................328
10.8.2 Операции над объединениями .......................................................328
10.8.3 Инициализация объединений в объявлениях ............................328
10.8.4 Демонстрация объединений ...........................................................329
10.9 Поразрядные операторы ...............................................................................330
10.9.1 Вывод целых чисел без знака в двоичном представлении ......331
Содержание 11
10.9.2 Повышение переносимости и масштабируемости
функции displayBits ...........................................................................333
10.9.3 Поразрядные операторы «И», «ИЛИ», исключающее
«ИЛИ» и дополнение .......................................................................334
10.9.4 Использование операторов поразрядного сдвига влево
и вправо ...............................................................................................337
10.9.5 Операторы поразрядного присваивания .....................................339
10.10 Битовые поля .................................................................................................340
10.11 Константы-перечисления ...........................................................................343
10.12 Безопасное программирование на C .......................................................345
11 Файлы .....................................................................................................347
11.1 Введение ..........................................................................................................348
11.2 Файлы и потоки данных .............................................................................348
11.3 Создание файла с последовательным доступом ..................................349
11.4 Чтение данных из файла с последовательным доступом ..................355
11.5 Произвольный доступ к файлам ..............................................................360
11.6 Создание файла с произвольным доступом .........................................361
11.7 Запись данных в файл с произвольным доступом ..............................363
11.8 Чтение данных из файла с произвольным доступом .........................366
11.9 Пример: реализация программы для работы со счетами ...................368
11.10 Безопасное программирование на C .......................................................373
12 Структуры данных .....................................................................375
12.1 Введение ..........................................................................................................376
12.2 Структуры, ссылающиеся на себя самих ................................................377
12.3 Динамическое выделение памяти ............................................................377
12.4 Связанные списки .........................................................................................379
12.4.1 Функция insert ...................................................................................385
12.4.2 Функция delete ..................................................................................387
12.4.3 Функция printList .............................................................................388
12.5 Стеки ................................................................................................................388
12.5.1 Функция push ....................................................................................392
12.5.2 Функция pop ......................................................................................393
12.5.3 Области применения стеков .........................................................394
12.6 Очереди ...........................................................................................................395
12.6.1 Функция enqueue ..............................................................................399
12.6.2 Функция dequeue ..............................................................................400
12.7 Деревья ............................................................................................................401
12.7.1 Функция insertNode .........................................................................405
12 Содержание
12.7.2 Обход дерева: функции inOrder, preOrder и postOrder ........406
12.7.3 Удаление дубликатов ......................................................................407
12.7.4 Поиск в двоичных деревьях ..........................................................407
12.8 Безопасное программирование на C .......................................................407
13 Препроцессор ................................................................................409
13.1 Введение ..........................................................................................................410
13.2 Директива препроцессора #include ........................................................410
13.3 Директива препроцессора #defi ne: символические константы .......411
13.4 Директива препроцессора #defi ne: макросы ........................................412
13.5 Условная компиляция .................................................................................414
13.6 Директивы препроцессора #error и #pragma .....................................416
13.7 Операторы # и ## .....................................................................................416
13.8 Номера строк .................................................................................................417
13.9 Предопределенные символические константы ....................................418
13.10 Утверждения ..................................................................................................418
13.11 Безопасное программирование на C .....................................................419
14 Разное ......................................................................................................420
14.1 Введение ..........................................................................................................421
14.2 Перенаправление ввода/вывода ...............................................................421
14.3 Функции с переменным количеством аргументов ...............................422
14.4 Использование аргументов командной строки ....................................425
14.5 Замечания о компиляции программ из нескольких исходных
файлов .............................................................................................................426
14.6 Завершение выполнения программ с помощью функций exit
и atexit ..............................................................................................................429
14.7 Окончания в литералах целых и вещественных чисел ......................430
14.8 Обработка сигналов .....................................................................................431
14.9 Динамическое выделение памяти: функции calloc и realloc .............433
14.10 Безусловные переходы с помощью goto ...............................................434
А Таблица предшествования операторов ................ 437
В Набор символов ASCII ........................................................... 439
С Системы счисления .................................................................. 440
C.1 Введение ..........................................................................................................441
C.2 Преобразование двоичных чисел в восьмеричное
и шестнадцатеричное представление .....................................................444
Содержание 13
C.3 Преобразование восьмеричных и шестнадцатеричных чисел
в двоичное представление ............................................................................446
C.4 Преобразование двоичных, восьмеричных
и шестнадцатеричных чисел в десятичное представление ..................446
C.5 Преобразование десятичных чисел в двоичное, восьмеричное
и шестнадцатеричное представление ........................................................447
C.6 Отрицательные двоичные числа: нотация дополнения до двух .......449
D Сортировка: взгляд в глубину ............................................451
D.1 Введение ............................................................................................................452
D.2 Нотация «Большое О» ...................................................................................452
D.3 Сортировка методом выбора........................................................................454
D.4 Сортировка методом вставки .......................................................................457
D.5 Сортировка методом слияния ......................................................................461
E Дополнительные особенности стандарта C ........ 468
E.1 Введение ............................................................................................................469
E.2 Поддержка положений ревизии C99 .........................................................470
E.3 Заголовочные файлы в C99 ........................................................................470
E.4 Включение объявлений в выполняемый код ..........................................471
E.5 Объявление переменных в заголовках инструкций for ........................472
E.6 Назначенные инициализаторы и составные литералы ........................473
E.7 Тип bool .............................................................................................................476
E.8 Неявный тип int в объявлениях функций ................................................477
E.9 Комплексные числа ........................................................................................479
E.10 Массивы переменной длины ........................................................................480
E.11 Дополнительные возможности препроцессора .....................................483
E.12 Другие особенности, определяемые ревизией C99 ..............................485
E.12.1 Минимальные требования компилятора к ресурсам .............485
E.12.2 Ключевое слово restrict ................................................................485
E.12.3 Надежное целочисленное деление ...........................................486
E.12.4 Гибкие члены-массивы .................................................................486
E.12.5 Ослабление ограничений в составных
инициализаторах ............................................................................487
E.12.6 Математические операции обобщенного типа .....................487
E.12.7 Встраиваемые функции ................................................................488
E.12.8 Инструкция return без выражения ..............................................488
E.12.9 Предопределенный идентификатор __func__ ......................488
E.12.10 Макрос va_copy ...............................................................................489
E.13 Новые особенности в ревизии C11 ...........................................................489
14 Содержание
E.13.1 Новые заголовочные файлы в C11 .............................................489
E.13.2 Поддержка многопоточной модели выполнения ..................490
E.13.3 Функция quick_exit ..........................................................................498
E.13.4 Поддержка Unicode® .......................................................................498
E.13.5 Спецификатор функций _Noreturn ...........................................499
E.13.6 Выражения обобщенного типа ...................................................499
E.13.7 Annex L: анализируемость и неопределенное поведение ....499
E.13.8 Анонимные структуры и объединения .....................................500
E.13.9 Управление выравниванием в памяти .......................................501
E.13.10 Статические утверждения ..............................................................501
E.13.11 Вещественные типы .......................................................................501
E.14 Веб-ресурсы ......................................................................................................501
F Отладчик Visual Studio ..............................................................505
F.1 Введение ............................................................................................................506
F.2 Точки останова и команда Continue...........................................................506
F.3 Окна Locals и Watch ......................................................................................511
F.4 Управление выполнением с помощью команд Step Into,
Step Over, Step Out и Continue .....................................................................514
F.5 Окно Autos .......................................................................................................517
G Отладчик GNU ..................................................................................518
G.1 Введение ............................................................................................................519
G.2 Точки останова и команды run, stop, continue и print ...........................519
G.3 Команды print и set .........................................................................................525
G.4 Управление выполнением с помощью команд step, fi nish и next ......527
G.5 Команда watch ..................................................................................................530
Алфавитный указатель .......................................................................533
Название: C для программистов с введением в C11
Автор: Дейтел П., Дейтел Х.
Год: 2014
Жанр: программирование
Издательство: ДМК Пресс
Язык: Русский
Формат: pdf
Качество: eBook
Страниц: 546
Размер: 12 MB
Скачать Дейтел П., Дейтел Х. - C для программистов с введением в C11 (2014)