КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Операции и L-выражения
Выбор элемента Синтаксис: < выражение >. < идентификатор > < выражение > -> <идентификатор> Выражение выбора элемента позволяет получить доступ к элементу структуры или объединения. Выражение имеет значение и тип выбранного элемента. В первой синтаксической форме <выражение> представляет значение типа struct или union, а идентификатор именует элемент специфицированной структуры или объединения. Во второй синтаксической форме <выражение> представляет указатель на структуру или объединение, а идентификатор именует элемент специфицированной структуры. Обе синтаксические формы выражения выбора элемента дают одинаковый результат. Запись <выражение> -> <идентификатор> для случая, когда <выражение> имеет тип указатель, эквивалентна записи (* < выражение >). < идентификатор > однако более наглядна. Примеры: struct pair { int a; inl b; struct pair *sp; } item, list[10]; item.sp = &item; /* пример 1 */ (item.sp)->a = 24; /* пример 2 */ list[8].b = 12; /* пример 3 */ В первом примере адрес структуры Нет присваивается элементу sp этой же структуры. В результате структура item содержит указатель на себя. Во втором примере используется адресное выражение item.sp с операцией выбора элемента ->, присваивающее значение элементу а. Учитывая результат примера 1, пример 2 эквивалентен записи item.a = 24; В третьем примере показано,каким образом в массиве структур осуществить доступ к элементу отдельной структуры. В зависимости от используемых операций выражения подразделяются на первичные, унарные, бинарные, тернарные, выражения присваивания и выражения приведения типа. Первичные выражения рассмотрены в разделах 4.2.4, 4.2.5, 4.2.6. Унарное выражение состоит из операнда с предшествующей ему унарной операцией.
Синтаксис: <унарная-операция> <операнд> Унарные операции рассмотрены в разделе 4.3.2. Бинарное выражение состоит из двух операндов, разделенных бинарной операцией. Синтаксис: <операнд1> <бинарная-операция> <операнд2> Бинарные операции рассмотрены в разделах 4.3.3 — 4.3.9. Тернарное выражение состоит из трех операндов, разделенных знаками условной операции "?:". Синтаксис: < операнд1 >? < операнд2 >: < операнд3 > Условная операция рассмотрена в разделе 4.3.10. Выражения присваивания используют унарные или бинарные операции присваивания. Унарными операциями присваивания являются инкремент "++" и декремент "--". Бинарные операции присваивания — это простое присваивание "=" и составные операции присваивания. Каждая составная операция присваивания представляет собой комбинацию какой-либо бинарной операции с простой операцией присваивания. Синтаксис выражений присваивания: Унарные операции присваивания: <операнд> ++ <операнд> -- ++ <операнд> --<операнд> Бинарные операции присваивания: < операнд1 > = < операнд2 > <операнд1> <составное-присваивание> <операнд2> Операция присваивания рассмотрена в разделе 4.4. Выражения приведения типа используют операцию приведения типа для явного преобразования типа переменной скалярного типа (целого, перечислимого, плавающего, пустого, указателя). Синтаксис: (<абстрактное-имя-типа>) <операнд> Операция приведения типа подробно рассматривается в разделе 4.7.2. Абстрактные имена типов описаны в разделе 3.8.3. Операнды некоторых операций в языке Си должны представлять собой так называемые L-выражения (Lvalue expressions). L-выражением является выражение, которое ссылается на ячейку памяти и потому имеет смысл в левой части бинарной операции присваивания. Простейшим примером L-выражения является идентификатор переменной: он ссылается на ячейку памяти, которая хранит значение этой переменной.
Поскольку L-выражение ссылается на ячейку памяти, адрес этой ячейки может быть получен с помощью операции адресации (&). Имеются, однако, исключения: не может быть получен адрес битового поля и адрес переменной класса памяти register, хотя значение им может быть присвоено. К L-выражениям относятся: — идентификаторы переменных целого, плавающего, перечислимого типов, указателей, структур и объединений; — индексные выражения, исключая те из них, значение которых имеет тип массив; — выражение выбора элемента, если выбранный элемент сам является одним из допустимых L-выражений; — выражение косвенной адресации, если только его значение не имеет тип массив или функция; — L-выражение в скобках; — выражение приведения типа переменной, если размер результирующего типа не превышает размера первоначального типа. Следующий пример иллюстрирует этот случай: char *р; int i; long n; (long *)p = &n; /* допустимое приведение типа */ (long)i = n; /* недопустимое приведение типа */ Перечисленные L-выражения называются также модифицируемыми L-выражениями. Кроме того, существуют немодифицируемые L-выражения; их адрес может быть получен, но использоваться в левой части бинарной операции присваивания они не могут. К ним относятся идентификаторы массивов, функций, а также переменных, объявленных с модификатором const.
Дата добавления: 2014-11-16; Просмотров: 344; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |