Слайды и текст доклада
Pic.1
Выражения языка С лекция 4
Pic.2
План лекции Классы, приоритеты и ассоциативность операций языка Си Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Выражения и подвыражения Неявные преобразования …
Pic.3
Обзор операций языка Си 1/3 Операции Си делятся на 5 классов по числу и расположению аргументов Запись одной операции состоит из одной или нескольких лексем
Pic.4
Обзор операций языка Си 2/3 Операции связываются с аргументами по возрастанию своих приоритетов Приоритеты задаются целыми числами
Pic.5
Обзор операций языка Си 3/3 Ассоциативность бинарных операций задает расстановку скобок в выражениях, содержащих операции одного приоритета Левоассоциативные -- слева направо Правоассоциативные -- …
Pic.6
Приоритеты операций в языке Си
Pic.7
Приоритеты операций в языке Си
Pic.8
Приоритеты операций в языке Си
Pic.9
Первичные выражения Идентификатор переменной или функции Константа Строковый литерал (является lvalue) Выражение, взятое в круглые скобки
Pic.10
Доступ к элементу массива A[k] A
Pic.11
Выражения и подвыражения <выражение>::= <выражение-присваивания> | <выражение> ',' <выражение-присваивания> <выражение-присваивания> ::= …
Pic.12
Выражения и подвыражения <условное-выражение> ::= <логическое-ИЛИ-выражение> | <логическое-ИЛИ-выражение> '?' <выражение> ':' <условное-выражение> …
Pic.13
Выражения и подвыражения <логическое-И-выражение>::= <ИЛИ-выражение> | <логическое-И-выражение> '&&' <ИЛИ-выражение> <ИЛИ-выражение>::= …
Pic.14
Выражения и подвыражения <И-выражение>::= <выражение-равенства> | <И-выражение> '&' <выражение-равенства> <выражение-равенства>::= …
Pic.15
Выражения и подвыражения <выражение-отношения>::= <сдвиговое-выражение> | <выражение-отношения> '<' <сдвиговое-выражение> | <выражение-отношения> …
Pic.16
Выражения и подвыражения <сдвиговое-выражение>::= <аддитивное-выражение> | <сдвиговое-выражение> '>>' <аддитивное-выражение> | <сдвиговое-выражение> …
Pic.17
Выражения и подвыражения <мультипликативное-выражение>::= <выражение-приведенное-к-типу> | <мультипликативное-выражение> '*' <выражение-приведенное-к-типу> | …
Pic.18
Выражения и подвыражения <выражение-приведенное-к-типу>::= <унарное-выражение> | '(' <имя-типа> ')' <выражение-приведенное-к-типу> …
Pic.19
Выражения и подвыражения <постфиксное-выражение>::= <первичное-выражение> | <постфиксное-выражение> '[' <выражение> ']' | <постфиксное-выражение> …
Pic.20
Выражения и подвыражения <первичное-выражение>::= <идентификатор> | <константа> | <строка> | '(' <выражение> ')'
Pic.21
Выражения и подвыражения <константа>::= <целая-константа> | <символьная-константа> | <константа-с-плавающей-точкой> | <константа-перечисление>
Pic.22
Выражения и подвыражения <список-аргументов-выражений>::= <выражение-присваивания> | <список-аргументов-выражений> ',' <выражение-присваивания>
Pic.23
Выражения и подвыражения Классы, приоритеты и ассоциативность операций языка Си Далее Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Неявные преобразования типов
Pic.24
Выражения l-value Ошибка или нет: (A[i] < A[j] ? A[i] : A[j]) = 1 // min(A[i], A[j]) заменить на 1 A[ A[i] < A[j] ? i : j ] = 1 Выражения языка Си, значениям которых гарантированно …
Pic.25
Выражения l-value l-value получаются при следующих операциях Доступ к значению переменной Доступ через указатель * Доступ к элементу массива a[k] Доступ к полю структуры или объединения student. name …
Pic.26
Выражения l-value Операции, требующие l-value Левый аргумент во всех видах присваивания =, += и т. п. Взятие адреса & Префиксные и постфиксные ++ и --
Pic.27
Выражения l-value Пример 1 int x; x = 2; // x – l-value int A[10]; A[5] = 5+x; // A[5] – l-value, 5+x – не l-value Пример 2 int x, y; (x < y ? x : y) = 1; // ошибка, т. к. (x < y ? x : y) не …
Pic.28
Точки следования, побочные эффекты Побочный эффект вычисления выражения – это факт изменения содержимого ячеек памяти в процессе вычисления выражения Присваивание x = 1; Сложный побочный эффект i = …
Pic.29
Точки следования, побочные эффекты Точка следования (sequence point) -- точка программы, в которой гарантируется, что все побочные эффекты предыдущих вычислений уже проявились, а побочные эффекты …
Pic.30
Точки следования, побочные эффекты Между вычислением левого и правого аргументов в операциях &&, || и , (запятая) Между вычислением первого и второго или третьего аргументов в операции ?: В …
Pic.31
Точки следования, побочные эффекты Пример 1 while (*p++ != 0 && *q++ != 0) *p = *q; Все побочные эффекты *p++ != 0 проявятся до начала вычисления *q++ != 0 Правило 1 Все побочные эффекты *p++ …
Pic.32
Точки следования, побочные эффекты Пример 2 int A[3] = {1,0,2}, *p = A; int a = (*p++) ? (*p++) : 0; // чему равно a? Точка следования находится после первого *p++ p уже увеличена на 1 при вычислении …
Pic.33
Точки следования, побочные эффекты Пример 3 int i = 0, j = i++, k = i++; int x = f(i++) + g(j++) + h(k++); Каждая из переменных i, j и k принимает новое значение перед входом в f, g и h …
Pic.34
Неявные преобразования типов Над числами Над указателями Других нет
Pic.35
Неявные преобразования чисел Если какой-либо из аргументов имеет тип long double, то другой приводится к long double В противном случае, если какой-либо из аргументов имеет тип double, то другой …
Pic.36
Неявные преобразования чисел Целочисленное повышение Значения типов enum, signed char, short int, unsigned char, unsigned short int автоматически преобразуются в int (если значение представимо как …
Pic.37
Неявные преобразования чисел Целочисленные преобразования из типа со знаком ST в тип без знака UT Если sizeof(ST) == sizeof(UT), то битовое представление не меняется Если sizeof(ST) < sizeof(UT), …
Pic.38
Неявные преобразования чисел Преобразования целые <--> числа с плавающей точкой С плавающей точкой --> целое Дробная часть отбрасывается int x = (int)1. 25; // x == 1 Если полученное …
Pic.39
Неявные преобразования чисел Преобразования чисел с плавающей точкой из типа F1 в F2 Если sizeof(F1) <= sizeof(F2), то значение не меняется (но может измениться битовое представление) Если …
Pic.40
Неявные преобразования указателей В операциях присваивания и сравнения целочисленное константное выражение со значением 0 автоматически преобразуется в указатель любого типа Результатом …
Pic.41
Неявные преобразования указателей В операциях присваивания и сравнения указатель на значение типа T автоматически преобразуется в указатель на значение типа const T и на значение типа volatile T
Pic.42
Неявные преобразования указателей Указатель типа void * автоматически преобразуется к указателю любого типа Если результат подвергнуть явному обратному преобразованию, то мы получим прежний указатель …
Pic.43
Явные преобразования указателей Для указателей допускаются и другие преобразования, но в связи с ними возникает проблема зависимости результата от реализации. Эти преобразования должны быть …
Pic.44
Заключение Выражения и подвыражения Классы, приоритеты и ассоциативность операций языка Си Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Неявные преобразования …
Скачать презентацию
Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!