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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Вы можете использовать операцию -> с указателями на объединения в той же манере, как применяли ее с указателями на структуры:

pu = &fit;

х = pu->digit; // то же, что и х = fit.digit

Ниже показано, как не следует поступать:

fit.letter = 'А';

flnum = 3 . О2*fit.bigf1; // ОШИБКА!

Эта последовательность ошибочна, т.к. сохранено значение типа char, но в следующей строке предполагается, что содержимое fit имеет тип double.

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

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

604 Глава 14 Пусть flits это структура с a rdat а Тогда если значение - фото 453

604 Глава 14

Пусть flits — это структура с a r_dat а. Тогда если значение flits.status равноО, программа может использовать f lits. ownerinfо.owncar. socsecurity, а если значение flits, status равно 1 — то flits .ownerinfo. leasecar. name.

Анонимные объединения (C11)

Анонимные объединения работают во многом подобно анонимным структурам. То есть анонимное объединение — это неименованное объединение, являющееся членом структуры или объединения. Например, структуру car_data можно переопределить следующим образом:

Теперь если flits этоструктура cardata мы можем применять flitsowncar - фото 454

Теперь, если flits —этоструктура car_data, мы можем применять flits.owncar. socsecurity вместо flits.ownerinfo. owncar. socsecurity.

Сводка: операции со структурами и объединениями Операция членства: .

Общий комментарий

Эта операция используется с именем структуры или объединения для указания члена структуры или объединения. Если name — имя структуры, a member — член, описанный шаблоном структуры, то следующее выражение идентифицирует этот член структуры:

name.member

Типом члена name.member является тип, указанный для member. Операция членства также может применяться и с объединениями.

Пример

struct {

int code; float cost;

} item;

item.code = 1265;

Последний оператор присваивает значение члену code структуры item.

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

Операция косвенного членства: ->

Общий комментарий

Эта операция используется с указателем на структуру или объединение с целью идентификации члена структуры или объединения. Предположим, что ptrstr является указателем на структуру, a member — членом, описанным в шаблоне структуры. Тогда оператор

ptrstr->member

идентифицирует этот член указанной структуры. В аналогичной манере операция косвенного членства может применяться с объединениями.

Пример

struct {

int code; float cost;

} item, * ptrst;

ptrst = &item; ptrst->code = 3451;

Последний оператор присваивает значение int члену code структуры item. Три приведенных ниже выражения эквивалентны:

ptrst->code item.code ( *ptrst) .code

Перечислимые типы

Перечислимый тип можно использовать для объявления символических имен, представляющих целочисленные константы. Ключевое слово enum позволяет создать новый “тип” и указать значения, которые для него допускаются. (На самом деле константы enum имеют тип int, поэтому их можно применять везде, где разрешено использовать тип int.) Целью перечислимых типов является улучшение читабельности программы. Их синтаксис похож на синтаксис, применяемый для структур. Например, можно записать следующие объявления:

enum spectrum {red, orange, yellow, green, blue, violet); enum spectrum color;

Первое объявление устанавливает spectrum как имя дескриптора, который позволяет использовать enum spectrum в качестве имени типа. Второе объявление делает color переменной этого типа. Идентификаторы внутри фигурных скобок перечисляют возможные значения, которые может иметь переменная spectrum. Таким образом, возможными значениями color будут red, orange, yellow и т.д. Эти символические константы называются перечислителями. Затем допускается применение показанных ниже операторов:

Хотя перечислители вроде red и blue имеют тип int переменные перечислимого - фото 455

Хотя перечислители вроде red и blue имеют тип int, переменные перечислимого типа не так жестко привязаны к целочисленному типу до тех пор, пока этот тип может содержать перечислимые константы. Например, перечислимые константы для spectrum входят в диапазон 0-5, так что для представления переменной color компилятор мог бы выбрать тип unsigned char.

606 глава 14

Кстати, некоторые свойства перечислений С не переносятся в C++. Например, С позволяет применять к перечислимой переменной операцию++, но стандарт C++ этого не допускает. Таким образом, если вы предполагаете, что в будущем код может быть объединен с программой C++, то должны объявить переменную color в предыдущем примере как относящуюся к типу int. Тогда код будет работать как в С, так и в C++.

Константы enum

Так что собой представляют blue и red? Формально они являются константами типа int. Например, имея предыдущее объявление перечислимого типа, можно записать так:

printf("red = %d, orange = %d\n", red, orange);

Ниже показан вывод:

red = 0, orange = 1

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

Стандартные значения

По умолчанию константам в списке перечислений присваиваются целочисленные значения 0, 1, 2 и т.д. Следовательно, объявление

enum kids {nippy, slats, skippy, nina, liz); приводит к тому, что nina имеет значение 3.

присвоенные значения

При желании вы можете выбрать целочисленные значения, которые должны иметь константы. Для этого просто включите нужные значения в объявление:

enum levels {low = 100, medium = 500.high = 2000};

Если значение присваивается одной константе, но не следующим за ней, то дальнейшие константы получат последовательно возрастающие значения. Например, взгляните на следующее объявление:

enum feline {cat, lynx = 10, puma, tiger};

В этом случае cat получает стандартное значение 0, a lynx, puma и tiger — соответственно, 10, 11 и 12.

Использование enum

Вспомните, что целью перечислимых типов является улучшение читабельности программы и упрощение ее сопровождения. Если вы имеете дело с цветами, то применение red (красный) и blue (голубой) намного информативнее, чем указание значений 0 и 1. Обратите внимание, что перечислимые типы предназначены для внутреннего использования. Если вы хотите ввести значение orange для переменной color, то должны вводить 1, а не слово orange, или же можно прочитать строку "orange" и заставить программу преобразовать ее в значение orange.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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