Презентация «Выражения языка С»

Смотреть слайды в полном размере
Презентация «Выражения языка С»

Вы можете ознакомиться с презентацией онлайн, просмотреть текст и слайды к ней, а также, в случае, если она вам подходит - скачать файл для редактирования или печати. Документ содержит 44 слайда и доступен в формате ppt. Размер файла: 109.08 KB

Просмотреть и скачать

Pic.1
Выражения языка С лекция 4
Выражения языка С лекция 4
Pic.2
План лекции Классы, приоритеты и ассоциативность операций языка Си Выражения l-value Порядок вычисле
План лекции Классы, приоритеты и ассоциативность операций языка Си Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Выражения и подвыражения Неявные преобразования …
Pic.3
Обзор операций языка Си 1/3 Операции Си делятся на 5 классов по числу и расположению аргументов Запи
Обзор операций языка Си 1/3 Операции Си делятся на 5 классов по числу и расположению аргументов Запись одной операции состоит из одной или нескольких лексем
Pic.4
Обзор операций языка Си 2/3 Операции связываются с аргументами по возрастанию своих приоритетов Прио
Обзор операций языка Си 2/3 Операции связываются с аргументами по возрастанию своих приоритетов Приоритеты задаются целыми числами
Pic.5
Обзор операций языка Си 3/3 Ассоциативность бинарных операций задает расстановку скобок в выражениях
Обзор операций языка Си 3/3 Ассоциативность бинарных операций задает расстановку скобок в выражениях, содержащих операции одного приоритета Левоассоциативные -- слева направо Правоассоциативные -- …
Pic.6
Приоритеты операций в языке Си
Приоритеты операций в языке Си
Pic.7
Приоритеты операций в языке Си
Приоритеты операций в языке Си
Pic.8
Приоритеты операций в языке Си
Приоритеты операций в языке Си
Pic.9
Первичные выражения Идентификатор переменной или функции Константа Строковый литерал (является lvalu
Первичные выражения Идентификатор переменной или функции Константа Строковый литерал (является lvalue) Выражение, взятое в круглые скобки
Pic.10
Доступ к элементу массива A[k] A
Доступ к элементу массива 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-va
Выражения и подвыражения Классы, приоритеты и ассоциативность операций языка Си Далее Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Неявные преобразования типов
Pic.24
Выражения l-value Ошибка или нет: (A[i] < A[j] ? A[i] : A[j]) = 1 // min(A[i], A[j]) заменить на
Выражения 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 получаются при следующих операциях Доступ к значению переменной Доступ чер
Выражения l-value l-value получаются при следующих операциях Доступ к значению переменной Доступ через указатель * Доступ к элементу массива a[k] Доступ к полю структуры или объединения student. name …
Pic.26
Выражения l-value Операции, требующие l-value Левый аргумент во всех видах присваивания =, += и т. п
Выражения 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+
Выражения 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) -- точка программы, в которой г
Точки следования, побочные эффекты Точка следования (sequence point) -- точка программы, в которой гарантируется, что все побочные эффекты предыдущих вычислений уже проявились, а побочные эффекты …
Pic.30
Точки следования, побочные эффекты Между вычислением левого и правого аргументов в операциях &&a
Точки следования, побочные эффекты Между вычислением левого и правого аргументов в операциях &&, || и , (запятая) Между вычислением первого и второго или третьего аргументов в операции ?: В …
Pic.31
Точки следования, побочные эффекты Пример 1 while (*p++ != 0 && *q++ != 0) *p = *q; Все побо
Точки следования, побочные эффекты Пример 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;
Точки следования, побочные эффекты Пример 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
Точки следования, побочные эффекты Пример 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, то другой приводится к long double В противном случае, если какой-либо из аргументов имеет тип double, то другой …
Pic.36
Неявные преобразования чисел Целочисленное повышение Значения типов enum, signed char, short int, un
Неявные преобразования чисел Целочисленное повышение Значения типов enum, signed char, short int, unsigned char, unsigned short int автоматически преобразуются в int (если значение представимо как …
Pic.37
Неявные преобразования чисел Целочисленные преобразования из типа со знаком ST в тип без знака UT Ес
Неявные преобразования чисел Целочисленные преобразования из типа со знаком 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)
Неявные преобразования чисел Преобразования чисел с плавающей точкой из типа F1 в F2 Если sizeof(F1) <= sizeof(F2), то значение не меняется (но может измениться битовое представление) Если …
Pic.40
Неявные преобразования указателей В операциях присваивания и сравнения целочисленное константное выр
Неявные преобразования указателей В операциях присваивания и сравнения целочисленное константное выражение со значением 0 автоматически преобразуется в указатель любого типа Результатом …
Pic.41
Неявные преобразования указателей В операциях присваивания и сравнения указатель на значение типа T
Неявные преобразования указателей В операциях присваивания и сравнения указатель на значение типа T автоматически преобразуется в указатель на значение типа const T и на значение типа volatile T
Pic.42
Неявные преобразования указателей Указатель типа void * автоматически преобразуется к указателю любо
Неявные преобразования указателей Указатель типа void * автоматически преобразуется к указателю любого типа Если результат подвергнуть явному обратному преобразованию, то мы получим прежний указатель …
Pic.43
Явные преобразования указателей Для указателей допускаются и другие преобразования, но в связи с ним
Явные преобразования указателей Для указателей допускаются и другие преобразования, но в связи с ними возникает проблема зависимости результата от реализации. Эти преобразования должны быть …
Pic.44
Заключение Выражения и подвыражения Классы, приоритеты и ассоциативность операций языка Си Выражения
Заключение Выражения и подвыражения Классы, приоритеты и ассоциативность операций языка Си Выражения l-value Порядок вычисления выражений, точки следования, побочные эффекты Неявные преобразования …


Скачать презентацию

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