Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

В ситуациях подобного рода можно использовать typedef. Например, в программе можно было бы предусмотреть следующие операторы:

typedef void (*V_FP_CHARP)(char *); void show (V_FP_CHARP fp, char *);

V_FP_CHARP pfun;

618 Глава 14

Если вы склонны к приключениям, можете объявить и инициализировать массив таких указателей:

V_FP_CHARP arpf[4] = {ToUpper, ToLower, Transpose, Dummy};

Если затем модифицировать функцию showmenu() так, чтобы она превратилась в тип int и возвращала значение 0, когда пользователь вводит символ и, значение 1 — когда 1, значение 2 — когда t и т.д., то цикл, содержащий switch, можно заменить приведенным ниже кодом:

index = showmenu();

while (index >= 0 && index <= 3)

{

strcpylcopy, line); /* сделать копию для show() */

show(arpf[index] , copy); /* использовать выбранную функцию */ index = showmenu();

}

Нельзя иметь массив функций, но можно иметь массив указателей на функции.

К этому моменту вы ознакомились со всеми четырьмя способами применения имени функции: в определении функции, в объявлении функции, в вызове функции и в качестве указателя (рис. 14.4).

Рж 144 Использование имени функции В плане поддержки меню функция showmenu - фото 463

Рж. 14.4. Использование имени функции

В плане поддержки меню функция showmenu() демонстрирует несколько приемов. Прежде всего, код

ans = getchar(); // получить ответ

ans = tolower(ans); // преобразовать в нижний регистр

и

ans = tolower(getchar());

отражает два способа преобразования пользовательского ввода в один регистр, так что не приходится выполнять проверку для ' и' и ' U' и т.д.

Функция eatline() избавляется от оставшейся части введенной строки. Это полезно по двум причинам. Во-первых, при выборе действия в меню пользователь набирает букву, а затем нажимает клавишу , что приводит к генерации символа новой строки. Если первым делом не избавиться от этого символа, он будет прочитан как следующий ответ. Во-вторых, предположим, что вместо буквы и пользователь вводит слово uppercase целиком. Без функции eatline() программа трактовала бы каждый символ слова uppercase как отдельный ответ. Благодаря eatline(), программа обрабатывает символ и и отбрасывает оставшуюся часть строки.

Структуры и другие формы данных 619

Далее, функция showmenu() спроектирована так, чтобы возвращать в программу только допустимые варианты выбора. Для содействия в этом применяется стандартная библиотечная функция strchr() из заголовочного файла string.h:

while (strchr("ulton", ans) == NULL)

Эта функция ищет местоположение первого вхождения символа ans в строке "ulton" и возвращает указатель на него. Если символ не найден, возвращается нулевой указатель. Таким образом, использованная нами в цикле while проверка удобнее конструкции следующего вида:

while (ans != [n] && ans != '1' && ans != ' t' && ans != 'o' && ans != 'n')

Чем больше вариантов приходится проверять, тем более удобным становится применение функции strchr().

Ключевые понятия

Информация, необходимая при решении задачи по программированию, часто выходит за рамки одиночного числа или списка чисел. Программа может иметь дело с сущностью или коллекцией сущностей, обладающих множеством свойств. Например, заказчик может быть представлен с помощью его имени, фамилии, адреса, номера телефона и других сведений; DVD-диск с фильмом может быть описан посредством его названия, продавца, длительности фильма, стоимости и прочих данных. Структура С позволяет собирать всю информацию вместе в одном элементе. Это очень удобно для организации программы. Вместо того чтобы хранить информацию в разрозненных переменных, все связанные данные сохраняются в одном месте.

При проектировании структуры часто полезно разработать пакет функций и в дальнейшем иметь дело только с ним. Например, вместо написания множества операторов printf() каждый раз, когда требуется отобразить содержимое структуры, можно написать функцию отображения, которая принимает структуру (или ее адрес) в качестве аргумента. Поскольку вся информация находится в структуре, для функции достаточно только одного аргумента. Если бы данные были помещены в отдельные переменные, для каждой порции данных пришлось бы предусмотреть свой аргумент. Кроме того, если вы, скажем, добавите в структуру еще один член, то нужно будет переписать функции, но не их вызовы, что является большим удобством во время модификации проектного решения.

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

Средство enum предлагает инструмент для определения символических констант, а typedef — средство создания нового идентификатора для базового или производного типа.

Указатели на функции предоставляют инструмент для уведомления одной функции о том, какие функции она должна применять.

620 Глава 14

Резюме

Структуры С служат средством для хранения нескольких элементов данных, обычно разных типов, в одном и том же объекте данных. Для идентификации шаблона структуры и для объявления переменных этого типа можно использовать дескриптор. Операция членства (.) позволяет обращаться к индивидуальным членам структуры с применением меток из шаблона структуры.

Имея указатель на структуру, для доступа к отдельным ее членам можно использовать этот указатель и операцию косвенного членства (->) вместо имени и операции точки. Получить адрес структуры можно с помощью операции &. В отличие от массивов, имя структуры не служит ее адресом.

Традиционно функции, связанные со структурами, принимали в своих аргументах указатели на структуры. Современная версия языка С допускает передачу структур в качестве аргументов, применение структур как возвращаемых значений и присваивание структур одного и того же типа. Тем не менее, передача адреса обычно эффективнее.

Объединения имеют тот же самый синтаксис, что и структуры. Однако члены в объединениях совместно используют одно и то же пространство памяти. Вместо того чтобы одновременно хранить несколько типов данных, как это делает структура, объединение хранит элемент данных одного типа из списка вариантов. Другими словами, структура может хранить, скажем, данные int, double и char, а соответствующее объединение может содержать либо int, либо double, либо char.

Перечисления позволяют создавать группу символических целочисленных констант (перечислимых констант) и определять связанный перечислимый тип.

С помощью средства typedef можно устанавливать псевдонимы или сокращенные представления стандартных типов С.

Имя функции является ее адресом. Такие адреса могут передаваться в виде аргументов функциям, которые в дальнейшем применяют функции, указанные этими адресами. Если pf — указатель на функцию, которому был присвоен адрес конкретной функции, то эту функцию можно вызвать двумя способами:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x