Главная » Просмотр файлов » Выражения языка Си

Выражения языка Си (1114737)

Файл №1114737 Выражения языка Си (А.А. Вылиток - Лекции)Выражения языка Си (1114737)2019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Выражения языка СиА. А. Вылиток1. Объекты и l-обозначенияОбъект — это область памяти, в которую можно записывать определеннуюинформацию и считывать ее оттуда. l-обозначение — это выражение, означающееобъект. Термин «l-обозначение» произошел от записи присваивания Е1 = Е2, в которойлевый (left — левый (англ.), отсюда и буква l) операнд Е1 должен быть l-обозначением.Примеры:Выражениеint i;int *pi = &i;i = 10;*pi = i + 1;Комментарийi — переменная целого типа intpi — переменная типа «указатель на int»выражение i здесь является l-обозначением, онообозначает объект целого типавыражение *pi обозначает тот же объект целого типаНекоторые операции могут образовывать l-обозначения, другие — нет.Не могут быть l-обозначениями:• имена функций• константы перечислимых типов• вызовы функций• операции приведения типовМогут быть l-обозначениями:• имена переменных• выражения в скобках вида: (e), где e является l-обозначением• e[k]• e.имя, если e является l-обозначением• e−>имя• *e• строковая константаПо способу записи все операции подразделяются на классы:• постфиксные:〈операнд〉 〈операция〉• префиксные:〈операция〉 〈операнд〉• инфиксные:〈операнд〉 〈операция〉 〈операнд〉(например, X++)(например, ++X)(например, X + Y)2.

Приоритет и ассоциативность операцийКаждая операция имеет вполне определенный приоритет и ассоциативность. Этопозволяет без лишних скобок однозначно понимать, к какой операции относитсяоперанд, стоящий между двумя соседними операциями. Например, в выраженииa+b*c-1-операнд b относится к операции умножения, так как у нее приоритет выше, чем усложения. Поэтому эквивалентное выражение со скобками будет таким:a + (b * c)Операции одинакового приоритета либо левоассоциативны, либо правоассоциативны.Это значит, что операнд, находящийся между двумя такими операциями, относитсялибо к левой операции, либо (в случае правой ассоциативности) к правой.

В языке Сиоперации сложения и вычитания имеют одинаковый приоритет и левуюассоциативность. Поэтому в выраженииa−b+cоперанд b относится к левой операции, т.е. к «минусу», а не к «плюсу», и этовыражение эквивалентно следующему выражению со скобками:((a − b) + c)Таким образом, левоассоциативные операции группируются с помощью скобок слеванаправо; правая ассоциативность задаёт способ группировки операций справа налево.Примером правоассоциативной операции в языке Си является операция присваивания.Выражение с операциями присваиванияa=b=cэквивалентно выражениюa=(b=c)Приоритет и ассоциативность позволяют установить границы подвыражений,являющихся операндами, и заключить их в скобки. Например, если в выраженииa*(b − c) + 2 + a*4*5 − dкаждый нетривиальный операнд заключить в скобки, получим:(((a*(b−c))+2)+((a*4)*5))−dКаждая операция вместе со своими операндами выделена в этом примере отдельнымцветом.Порядок выполнения операций зависит не только от расстановки скобок, но и отпорядка вычисления операндов (об этом ниже в п.

4).В языке Си все постфиксные операции имеют одинаковый приоритет — самыйвысокий по отношению к другим операциям, — и естественным образом группируютсяслева направо. Приоритет префиксных операций ниже, чем у постфиксных, но выше,чем у инфиксных. Префиксные операции естественным образом группируются справаналево. Например, в выражении-2-&*p[i]++операции & и * — префиксные, [] и ++ — постфиксные. Поэтому скобки будутрасставлены так:&(*((p[i])++))Инфиксные операции разбиты на несколько групп, имеющих разные приоритеты иассоциативность (см. таблицу в п.

6).3. Основное значение операции и побочные эффектыКаждая операция имеет операнды определенных типов и задает способ получения позначениям этих операндов нового значения определенного типа.Некоторые операции имеют побочный эффект. При выполнении этих операций, кромеосновного эффекта — вычисления значения — происходят изменения объектов илифайлов. Таковы, например, операции присваивания. Значением выражения a = b будетзначение переменной b, приведенное к типу переменной a, и в качестве побочногоэффекта это значение будет присвоено переменной a.Иногда выражения вычисляются только ради побочных эффектов, вычисленноезначение игнорируется. Вызовы функций и операция приведения типа могут давать«пустое» значение, т.е. значение типа void.4.

Порядок вычисления операндовВ некоторых операциях порядок вычисления операндов строго фиксирован. Например,в логическом «ИЛИ» сначала вычисляется левый операнд, затем — правый. Вбольшинстве операций языка Си порядок вычисления операндов не определен. Этозначит, что в реализации может быть выбран любой порядок вычислений, и дажеперемежаться правый и левый порядок одновременно.5. Синтаксис выраженийВыражения строятся из первичных выражений и знаков операций. Первичныевыражения вычисляются в первую очередь, они имеют наивысший приоритет. Кпервичным выражениям относятся:• идентификатор• лексическая константа• выражение в скобках• sizeof (〈описание типа〉)Синтаксис выражений задается диаграммой:-3-〈выражение〉 ::=префикснаяоперацияпостфикснаяоперацияпервичноевыражениеинфикснаяоперация6. Таблица приоритетов операцийВ таблице перечислены все операции языка Си в порядке убывания приоритетов.Высший приоритет имеет номер 16, низший — номер 1.

Для каждой операции указаныспособ записи, класс и ассоциативность.Лексемы[…](…). 〈имя〉−>〈имя〉++−−sizeof++−−&*+−~!(〈тип〉)*/%+–<<>><<=>>===!=&^Названиеиндексвызов функциипрямой выборчлена 〈имя〉выбор члена 〈имя〉через указательувеличениеуменьшениеразмерувеличениеуменьшениеадресразыменованиеплюсминуспобитовое НЕлогическое НЕприведение типаумножениеделениеостатоксложениевычитаниесдвиг влевосдвиг вправоменьшеменьше или равнобольшебольше или равноравноне равнопобитовое ИпобитовоеНотацияX[Y]X(Y)КлассПриоритетГруппировкапостфикс.16слева направопрефикс.15справа налевопрефикс.14справа налевоинфиксн.13слева направоинфиксн.12слева направоинфиксн.11слева направоинфиксн.10слева направоинфиксн.9слева направоинфиксн.инфиксн.87слева направослева направоX.〈имя〉X−>〈имя〉X++X−−sizeof X++X−−X&X*X+X−X~X!X(〈тип〉) XX*YX/YX%YX+YX−YX << YX >> YX<YX <= YX>YX >= YX == YX != YX&YX^Y-4-Лексемы|&&||?:=*=/=%=+=−=<<=>>=&=^=|=,Названиеисключающее ИЛИпобитовое ИЛИлогическое Илогическое ИЛИусловиеприсваиваниеприсваивание cумножениемприсваивание сделениемприсваивание состаткомприсваивание сосложениемприсваивание свычитаниемприсваивание сосдвигом влевоприсваивание сосдвигом вправоприсваивание спобитовым Иприсваивание спобитовымисключающимИЛИприсваивание спобитовым ИЛИзапятаяНотацияX|YX && YX || YZ?X:YX=YКлассПриоритетГруппировкаинфиксн.инфиксн.инфиксн.инфиксн.6543слева направослева направослева направосправа налевоинфиксн.2справа налевоинфиксн.1слева направоX *= YX /= YX %= YX += YX −= YX <<= YX >>= YX &= YX ^= YX |= YX, Y7.

Виды скобок в выраженияхВ выраженияx языка Си встречаются три вида скобок:1) ( )2) [ ]3) ? :Выражение должно быть сбалансировано по всем видам скобок. Подвыражения,ограниченные парами скобок любых видов, могут вкладываться друг в друга. Дваподвыражения, ограниченные скобками, либо вложены одно в другое, либо непересекаются.Примеры:ВыражениеКомментарийf (a*(b+c) ? −s+m[x ? y−1 : z] : d) * (5−a)правильное выражение(m[j)+i]не является выражением-5-Круглые скобки имеют четыре различные роли:••••первичное выражениевызов функцииприведение типаsizeof(〈тип〉)||||(a + b)f (x, y)(int) (5.2+1)sizeof (int *)Роль квадратных скобок — индексирование элементов массива. Кроме того,квадратные скобки используются при описании массива (в них может указыватьсячисло элементов в массиве).

В выражении X [Y ] запись «[Y ]» считается постфикснойоперацией, применяемой к операнду «X». Также и в вызове функции X (Y ),конструкция «(Y )», где Y — список аргументов (возможно, пустой) считаетсяпостфиксной операцией по отношению к операнду «X», именующему функцию.Скобки ? : ограничивают в условной операции Z ? X : Y средний операнд X.Конструкция «? X :» по отношению к левому (Z ) и правому (Y ) операндамрассматривается как инфиксная операция, имеющая правую ассоциативность иприоритет, который ниже, чем у логического ИЛИ, но выше, чем у операцийприсваивания.Примеры:ВыражениеЭквивалентное выражениеa?b:c?d:ea ? b : (c ? d : e)x = y = а ? b + c : d || e ? b − c : c*ba?b?c:d?e:f:gx = ( y = (а ? (b+c) : ((d || e)?(b−c) : (c∗b)) ) )a ? ( b ? c : (d ? e : f ) ) : gЗапись x = а ? b : d = y не является правильным выражением, поскольку в соответствиис приоритетами она трактуется как x = ( а ? b : d ) = y, но слева от правой операцииприсваивания должно быть выражение, которое являлось бы l-обозначением.8.

Точки последовательных вычисленийПобочный эффект при вычислении выражения — это занесение в память значенийобъектов, изменение состояния файла либо доступ к volatile-объектам. К побочнымэффектам могут приводить вызовы функций, если вызываемая функция изменяет«внешний» по отношению к ней объект. Кроме того, операции увеличения иуменьшения (префиксные и постфиксные) а также все операции присваивания, помимосвоего основного значения, обладают побочным эффектом — изменяют объекты.Обычно эти операции и применяют ради изменения объектов.

Однако, побочныйэффект не обязан «проявиться» одновременно с вычислением значения операции.Например, y = *p++; может быть вычислено какtemp = p; p += 1; y = *temp;либо какy = *p; p += 1;Выражение может содержать несколько операций с побочным эффектом. Порядоквычислений важен для понимания того, когда проявляется побочный эффект.-6-Точка последовательных вычислений (sequence point) — это точка в программе, гдеможно точно определить, какие из побочных эффектов уже проявились, а какие — ещенет. Если полное выражение является частью оператора, то точкой, где заведомовыполнились все побочные эффекты его вычисления, — конец этого выражения.Например, в y = 37; x += y; можно быть уверенным, что 37 будет занесено в y раньше,чем значение y будет извлечено из памяти при вычислении суммы x + y.Полное выражение — это выражение инициализации, операторное выражение,выражение в операторе return и управляющее выражение в условном операторе, циклеили операторе switch (в том числе каждое из трех выражений оператора for).Кроме того, точки последовательных вычислений могут быть расположены внутрисамого выражения:• при выполнении операции x, y такая точка находится между вычислением xи y;• при выполнении операции z ? x : y такая точка находится междувычислением z и вычислением x либо y;• при вызове функции все побочные эффекты вычисления значений ееаргументов проявятся перед выполнением ее тела;• при выполнении операций x && y и x || y такая точка находится междувычислением x и вычислением y.Например, в if ( (c = getchar ()) != EOF && isprint(c) )вызов функции isprint (c)произойдет только после того, как переменная c получит новое значение.В стандарте Си между двумя точками последовательных вычислений изменениезначения переменной возможно не более одного раза.

Например, верноval = 10 * val + (c − '0');но неверноi = ++i + 2;Другой пример выражения, значение которого стандарт Си считает неопределенным:++i*++iВыражение может содержать точки последовательных вычислений, и тем не менее,порядок вычислений не будет однозначным. Например, f (x) + g (x) содержит такиеточки, однако операция + допускает произвольный порядок вычисления ее операндов.-7-.

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

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

Тип файла PDF

PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

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