Главная » Просмотр файлов » Керниган и Ритчи - Язык программирования Си

Керниган и Ритчи - Язык программирования Си (793773), страница 52

Файл №793773 Керниган и Ритчи - Язык программирования Си (Керниган и Ритчи - Язык программирования Си) 52 страницаКерниган и Ритчи - Язык программирования Си (793773) страница 522019-04-24СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 52)

Еслидано такое объявление, тоstruct tnode s, *sp;объявит s как структуру заданного вида, a sp — как указатель на такую структуру. Согласно приведеннымопределениям выражениеsp->countобращается к элементу count в структуре, на которую указывает sp;s.left— указатель на левое поддерево в структуре s; as.right->tword[0]— это первый символ из tword — элемента правого поддерева s.Вообще говоря, невозможно проконтролировать, тот ли используется элемент объединения, которомупоследний раз присваивалось значение. Однако гарантируется выполнение правила, облегчающего работу сэлементами объединения: если объединение содержит несколько структур, начинающихся с общей для нихпоследовательности данных, и если объединение в текущий момент содержит одну из этих структур, то кобщей части данных разрешается обращаться через любую из указанных структур.

Так, правомеренследующий фрагмент программы:union {struct {int type;} n;struct {int type;int intnode;} ni;struct {int type;float floatnode;} nf;} u;...u.nf.type = FLOAT;u.nf.floatnode = 3.14;...if (u.n.type == FLOAT)... sin(u.nf.floatnode) ...A 8.4. ПеречисленияПеречисления — это уникальный тип, значения которого покрываются множеством именованных констант,называемых перечислителями. Вид спецификатора перечисления заимствован у структур и объединений.спецификатор-перечисления:enum идентификаторнеоб, { список-перечислителей }enum идентификаторсписок-перечислителей:перечислительсписок-перечислителей , перечислительперечислитель:идентификаторидентификатор = константное-выражениеИдентификаторы, входящие в список перечислителей, объявляются константами типа int и могутупотребляться везде, где требуется константа.

Если в этом списке нет ни одного перечислителя со знаком =,то значения констант начинаются с 0 и увеличиваются на 1 по мере чтения объявления слева направо.Перечислитель со знаком = даёт соответствующему идентификатору значение; последующиеидентификаторы продолжают прогрессию от заданного значения.Имена перечислителей, используемые в одной области видимости, должны отличаться друг от друга и отимен обычных переменных, однако их значения могут и совпадать.Роль идентификатора в переч-спецификаторе аналогична роли тега структуры в структ-спецификаторе: онявляется именем некоторого конкретного перечисления. Правила для списков и переч-спецификаторов (стегами и без) те же, что и для спецификаторов структур или объединений, с той лишь оговоркой, чтоэлементы перечислений не бывают незавершенного типа; тег переч-спецификатора без спискаперечислителей должен иметь в пределах области видимости спецификатор со списком.В первой версии языка перечислений не было, но они уже несколько лет применяются.А 8.5.

ОбъявителиОбъявители имеют следующий синтаксис:объявитель:указательнеоб собственно-объявительсобственно-объявитель:идентификатор( объявитель )собственно-объявитель [ константное-выражениенеоб ]собственно-объявитель ( список-типов-параметров )собственно-объявитель ( список-идентификаторовнеоб )указатель:* список-квалификаторов-типанеоб* список-квалификаторов-типанеоб указательсписок-квалификаторов-типа:квалификатор-типасписок-квалификаторов-типа квалификатор-типаУ структуры объявителя много сходных черт со структурой подвыражений, поскольку в объявителе, как и вподвыражении, допускаются операции косвенного обращения, обращения к функции и получения элементамассива (с тем же порядком применения).А 8.6. Что означают объявителиСписок объявителей располагается сразу после спецификаторов типа и указателя класса памяти.

Главныйэлемент любого объявителя — это объявляемый им идентификатор; в простейшем случае объявитель из негоодного и состоит, что отражено в первой строке продукции грамматики с именем собственно-объявителъ.Спецификаторы класса памяти относятся непосредственно к идентификатору, а его тип зависит от видаобъявителя. Объявитель следует воспринимать как утверждение: если в выражении идентификаторпоявляется в том же контексте, что и в объявителе, то он обозначает объект специфицируемого типа.Если соединить спецификаторы объявления, относящиеся к типу (А8.2), и некоторый конкретный объявитель,то объявление примет вид "Т D", где Т — тип, а D — объявитель.

Эта запись индуктивно придает типидентификатору любого объявителя.В объявлении Т D, где D — просто идентификатор, тип идентификатора есть Т.В объявлении Т D, где D имеет вид( D1 )тип идентификатора в D1 тот же, что и в D. Скобки не изменяют тип, но могут повлиять на результаты его"привязки" к идентификаторам в сложных объявителях.А 8.6.1. Объявители указателейВ объявления Т D, где D имеет вид* список-квалификаторов-типанеоб D1а тип идентификатора объявления Т D1 есть "модификатор-типа Т", тип идентификатора D есть"модификатор-типа список-квалификаторов-типа указатель на Т". Квалификаторы,следующие за *, относятся к самому указателю, а не к объекту, на который он указывает.

Рассмотрим,например, объявлениеint *ap[];Здесь ар[] играет роль D1; объявление int ap[] следует расшифровать (см. ниже) как "массив изint"; список квалификаторов типа здесь пуст, а модификатор типа есть "массив из". Следовательно, насамом деле объявление ар гласит: "массив из указателей на int". Вот еще примеры объявлений:int i, *pi, *const cpi = &i;const int ci = 3, *pci;В них объявляются целое i и указатель на целое pi. Значение указателя cpi неизменно; cpi всегда будетуказывать в одно и то же место, даже если значение, на которое он указывает, станет иным. Целое ci естьконстанта, оно измениться не может (хотя может инициализироваться, как в данном случае).

Тип указателяpci произносится как "указатель на const int"; сам указатель можно изменить; при этом он будетуказывать на другое место, но значение, на которое он будет указывать, с помощью pci изменить нельзя.А 8.6.2. Объявители массивовВ объявлениях Т D, где D имеет видD1 [ константное-выражениенеоб ]и где тип идентификатора объявления Т D1 есть "модификатор-типа Т", тип идентификатора D есть"модификатор-типа массив из Т".

Если константное выражение присутствует, то оно должно бытьцелочисленным и больше 0. Если константное выражение, специфицирующее количество элементов вмассиве, отсутствует, то массив имеет незавершенный тип.Массив можно конструировать из объектов арифметического типа, указателей, структур и объединений, атакже других массивов (генерируя при этом многомерные массивы). Любой тип, из которого конструируетсямассив, должен быть завершенным, он не может быть, например, структурой или массивом незавершенноготипа. Это значит, что для многомерного массива пустой может быть только первая размерность.Незавершенный тип массива получает свое завершение либо в другом объявлении этого массива (А10.2),либо при его инициализации (А8.7). Например, записьfloat fa[17], *afp[17];объявляет массив из чисел типа float и массив из указателей на числа типа float. Аналогичноstatic int x3d[3][5][7];объявляет статический трехмерный массив целых размера 3x5x7.

На самом деле, если быть точными, x3dявляется массивом из трех элементов, каждый из которых есть массив из пяти элементов, содержащих по 7значений типа int.Операция индексирования Е1[Е2] определена так, что она идентична операции *(Е1+Е2). Следовательно,несмотря на асимметричность записи, индексирование — коммутативная операция. Учитывая правилапреобразования, применяемые для оператора + и массивов (А6.6, А7.1, А7.7), можно сказать, что если Е1 —массив, а Е2 — целое, то Е1[Е2] обозначает Е2-й элемент массива Е1.Так, x3d[i][j][k] означает то же самое, что и *(x3d[i][j]+k). Первое подвыражение, x3d[i][j],согласно А7.1, приводится к типу "указатель на массив целых"; по А7.7 сложение включает умножение наразмер объекта типа int.

Из этих же правил следует, что массивы запоминаются "построчно" (последниеиндексы меняются чаще) и что первая размерность в объявлении помогает определить количество памяти,занимаемой массивом, однако в вычислении адреса элемента массива участия не принимает.А 8.6.3. Объявители функцийВ новом способе объявление функции Т D, где D имеет видD1 (список-типов-параметров)и тип идентификатора объявления Т D1 есть "модификатор-типа Т", тип идентификатора в D есть"модификатор-типа функция с аргументами список-типов-параметров, возвращающаяТ". Параметры имеют следующий синтаксис:список-типов-параметров:список-параметровсписок-параметров , ...список-параметров:объявление-параметрасписок-параметров , объявление-параметраобъявление-параметра:спецификаторы-объявления объявительспецификаторы-объявления абстрактный-объявительнеобПри новом способе объявления функций список параметров специфицирует их типы, а если функция вообщене имеет параметров, на месте списка типов указывается одно слово — void.

Характеристики

Тип файла
PDF-файл
Размер
2,25 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7031
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее