Операция присваивания

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

15.14. Операция присваивания

Имеется ряд операций присваивания, каждая из которых

группируется слева направо. Все операции требуют в качестве

своего левого операнда L-значение, а типом выражения присва-

ивания является тип его левого операнда. Значением выражения

присваивания является значение, хранимое в левом операнде

после того, как присваивание уже будет произведено. Две час-

ти составной операции присваивания являются отдельными лек-

семами.

Выражение-присваивания:

L-значение = выражение

L-значение += выражение

L-значение -= выражение

L-значение *= выражение

L-значение /= выражение

L-значение %= выражение

L-значение >>= выражение

L-значение <<= выражение

L-значение &= выражение

L-значение ^= выражение

L-значение \!= выражение

 

Когда производится простое присваивание C'=', значение

выражения заменяет значение объекта, на которое ссылается

L-значение. Если оба операнда имеют арифметический тип, то

перед присваиванием правый операнд преобразуется к типу ле-

вого операнда.

О свойствах выражения вида E1 оп = E2, где Oп - одна из

перечисленных выше операций, можно сделать вывод, если

учесть, что оно эквивалентно выражению E1 = E1 оп (E2); од-

нако выражение E1 вычисляется только один раз. В случае опе-

раций += и -= левый операнд может быть указателем, причем

при этом (целочисленный) правый операнд преобразуется таким

образом, как объяснено в п. 15.4; все правые операнды и все

отличные от указателей левые операнды должны иметь арифмети-

ческий тип.

Используемые в настоящее время компиляторы допускают

присваивание указателя целому, целого указателю и указателя

указателю другого типа. такое присваивание является чистым

копированием без каких-либо преобразований. Такое употребле-

ние операций присваивания является непереносимым и может

приводить к указателям, которые при использовании вызывают

ошибки адресации. Тем не менее гарантируется, что присваива-

ние указателю константы 0 дает нулевой указатель, который

можно отличать от указателя на любой объект.

15.15. Операция запятая Выражение-с-запятой:

выражение , выражение

·    
200 -

Пара выражений, разделенных запятой, вычисляется слева нап-

раво и значение левого выражения отбрасывается. Типом и зна-

чением результата является тип и значение правого операнда.

Эта операция группируется слева направо. В контексте, где

запятая имеет специальное значение, как, например, в списке

фактических аргументов функций (п. 15.1) Или в списках ини-

циализаторов (п. 16.6), Операция запятая, описываемая в этом

разделе, может появляться только в круглых скобках; напри-

мер, функция

 

F(A,(T=3,T+2),C)

имеет три аргумента, второй из которых имеет значение 5.

16. Описания

Описания используются для указания интерпретации, кото-

рую язык “C” будет давать каждому идентификатору; они не

обязательно резервируют память, соответствующую идентифика-

тору. Описания имеют форму

Описание:

спецификаторы-описания список-описателей

необ;

Описатели в списке описателей содержат описываемые идентифи-

каторы. Спецификаторы описания представляют собой последова-

тельность спецификаторов типа и спецификаторов класса памя-

ти.

 

Спецификаторы-описания:

спецификатор-типа спецификаторы-описания

необ

спецификатор-класса-памяти спецификатор-описания

необ

 

список должен быть самосогласованным в смысле, описываемом

ниже.

16.1. Спецификаторы класса памяти Ниже перечисляются спецификаторы класса памяти:

Спецификатор-класса-памяти:

AUTO

STATIC

EXTERN

REGISTER

TYPEDEF

 

Спецификатор TYPEDEF не реализует памяти и называется

“спецификатором класса памяти” только по синтаксическим со-

ображениям; это обсуждается в п. 16.8. Смысл различных клас-

сов памяти был обсужден в п. 12.

Описания AUTO, STATIC и REGISTER служат также в качестве

определений в том смысле, что они вызывают резервирование

нужного количества памяти. В случае EXTERN должно присутст-

вовать внешнее определение (п. 18) Указываемых идентификато-

ров где-то вне функции, в которой они описаны.


·     201 -

Описание REGISTER лучше всего представлять себе как опи-

сание AUTO вместе с намеком компилятору, что описанные таким

образом переменные будут часто использоваться. Эффективны

только несколько первых таких описаний. Кроме того, в регис-

трах могут храниться только переменные определенных типов;

на PDP-11 это INT, CHAR или указатель. Существует и другое

ограничение на использование регистровых переменных: к ним

нельзя применять операцию взятия адреса &. При разумном ис-

пользовании регистровых описаний можно ожидать получения

меньших по размеру и более быстрых программ, но улучшение в

будущем генерирования кодов может сделать их ненужными.

Описание может содержать не более одного спецификатора

класса памяти. Если описание не содержит спецификатора клас-

са памяти, то считается, что он имеет значение AUTO, если

описание находится внутри некоторой функции, и EXTERN в про-

тивном случае. исключение: функции никогда не бывает автома-

тическими.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх