C. Бочков - Язык программирования Си для персонального компьютера
- Название:Язык программирования Си для персонального компьютера
- Автор:
- Жанр:
- Издательство:СП Диалог, Радио и связь
- Год:1990
- ISBN:5-256-00974-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
C. Бочков - Язык программирования Си для персонального компьютера краткое содержание
Книга содержит полное описание наиболее распространенных реализаций языка программирования Си на 16-разрядных микроЭВМ, совместимых с IBM PC. Приведено описание стандартных библиотек языка.
Для слушателей учебных курсов в области программирования, разработчиков программного обеспечения, а также студентов соответствующих специальностей вузов. Может быть использовано как техническая документация и справочное пособие для широкого круга программистов, как профессионалов, имеющих большой опыт работы на языке Си, так и начинающих программировать на Си.
Язык программирования Си для персонального компьютера - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Примеры:
/* пример 1 */
for(i=j =1; i+j <20; i+=i, j--)…
/* пример 2 */
func_one( x, у + 2, z);
func_two((x--, y + 2), z);
В первом примере каждый операнд третьего выражения оператора цикла forвычисляется независимо. Сначала вычисляется i+=i, затем j--.
Во втором примере символ "запятая" используется как разделитель в двух различных контекстах. В первом вызове функции func_oncпередаются три аргумента, разделенных запятыми: х, у+2, 2. Здесь символ "запятая" используется просто как разделитель
В вызове функции func_twoвнутренние скобки вынуждают компилятор интерпретировать первую запятую как операцию последовательного вычисления. Этот вызов передает функции func_twoдва аргумента. Первый аргумент — это результат последовательного вычисления (х--,у+2), имеющий значение и тип выражения у+2. Вторым аргументом является z .
Условная операция
В языке Си имеется одна тернарная операция — уловная. Она имеет следующий синтаксис:
< операнд1 > ? < операнд2 >: < операнд3 >
Выражение < операнд1 > вычисляется и сравнивается с нулем. Выражение может иметь целый, плавающий тип, либо быть указателем. Если < операнд1 > имеет ненулевое значение, то вычисляется < операнд2 > и результатом условной операции является его значение. Если же < операнд1 > равен нулю, то вычисляется < операнд3 > и результатом является его значение. В любом случае вычисляется только один из операндов, < операнд2 > или < операнд3 >, но не оба.
Тип результата зависит от типов второго и третьего операндов (они могут различаться) следующим образом:
1) Если второй и третий операнды имеют целый или плавающий тип, то выполняются преобразования по умолчанию. Типом результата является тип операндов после преобразования.
2) Второй и третий операнды могут быть структурами, объединениями или указателями одного и того же типа. Типом результата будет тот же самый тип структуры, объединения или указателя.
3) Если либо второй, либо третий операнд имеет тип void(например, является вызовом функции, тип значения которой void), то другой операнд также должен иметь тип void, и результат имеет тип void.
4) Если либо второй, либо третий операнд является указателем на какой-либо тип, а другой является указателем на void,то результат имеет тип указатель на void.
5) Если либо второй, либо третий операнд является указателем, то другой может быть константным выражением со значением 0. Типом результата является указатель.
Пример:
j =(i < 0 )?(-i) : (i);
В примере jприсваивается абсолютное значение i. Если iменьше нуля, то jприсваивается -i. Если iбольше или равно нулю, то jприсваивается i .
Операции присваивания
В языке Си имеются следующие операции присваивания:
Операция | Действие |
++ | Унарный инкремент |
-- | Унарный декремент |
= | Простое присваивание |
*= | Умножение с присваиванием |
/= | Деление с присваиванием |
%= | Остаток от деления с присваиванием |
+= | Сложение с присваиванием |
-= | Вычитание с присваиванием |
<<= | Сдвиг влево с присваиванием |
>>= | Сдвиг вправо с присваиванием |
&= | Поразрядное И с присваиванием |
|= | Поразрядное включающее ИЛИ с присваиванием |
^= | Поразрядное исключающее ИЛИ с присваиванием |
При присваивании тип правого операнда преобразуется к типу левого операнда. Специфика этого преобразования зависит от обоих типов и подробно описана в разделе 4.7.1. Левый (или единственный) операнд операции присваивания должен быть модифицируемым L-выражением (см. раздел 4.2.7).
Важное отличие присваивания в языке Си от операторов присваивания в других языках программирования состоит в том, что в языке Си операция присваивания вырабатывает значение, которое может быть использовано далее в вычислении выражения.
Операции инкремента и декремента
Операции ++ и -- инкрементируют (увеличивают на единицу) и декрементируют (уменьшают на единицу) свой операнд. Операнд должен иметь целый, плавающий тип или быть указателем. В качестве операнда допустимо только модифицируемое L-выражение.
Операнды целого или плавающего типа увеличиваются или уменьшаются на целую единицу. Над операндом не производятся преобразования по умолчанию. Тип результата соответствует типу операнда. Операнд типа указатель инкрементируется или декрементируется на размер объекта, который он адресует, по правилам, описанным в разделе 4.3.4. Инкрементированный указатель адресует следующий элемент данного типа, а декрементированный указатель—предыдущий.
Операции инкремента и декремента могут записываться как перед своим операндом (префиксная форма записи), так и после него (постфиксная форма записи). Для операции в префиксной форме операнд сначала инкрементируется или декрементируется, а затем его новое значение участвует в дальнейшем вычислении выражения, содержащего данную операцию. Для операции в постфиксной форме операнд инкрементируется лишь после того, как его старое значение участвует в вычислении выражения. Таким образом, результатом операций инкремента и декремента является либо новое, либо старое значение операнда.
Примеры:
/* пример 1 */
if(pos++ > 0) *p++ = *q++;
/* пример 2 */
if(line[--i] != '\n') return;
В первом примере переменная pos проверяется на положительное значение, а затем инкрементируется. Если значение pos до инкремента было положительно, то выполняется следующий оператор. В нем значение, указуемое q, заносится по адресу, содержащемуся в р. После этого ри qинкрементируются.
Во втором примере переменная iдекрементируется перед ее использованием в качестве индекса массива line.
Простое присваивание
Операция простого присваивания обозначается знаком =. Значение правого операнда присваивается левому операнду. Левый операнд должен быть модифицируемым L-выражением. При присваивании выполняются правила преобразования типов, описанные в разделе 4.7.1.
Операция вырабатывает результат, который может быть далее использован в выражении. Результатом операции является присвоенное значение. Тип результата — тип левого операнда.
Пример 1:
Читать дальшеИнтервал:
Закладка: