В выражениях в качестве операндов могут использоваться подвыражения. Подвыражение — это обычное выражение, заключенное в скобки.

Подвыражения могут использоваться для группировки частей выражения, точно так же, как и в обычной алгебраической записи. Использование подвыражений позволяет сократить количество операторов в программе, а значит и объем исходного текста (но не объем исполняемого кода), однако одновременно оно затрудняет отладку этой программы.

Операнды и операции

Операнд— это константа, литеральная строка, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.

Если в качестве операнда используется константа, то ему соответствует значение и тип представляющей его константы. Целочисленная константа может быть типа char, int, long, unsigned int, unsigned long, в зависимости от ее значения и от формы записи. Символьная константа имеет тип char. Константа с плавающей точкой всегда имеет тип float.

Литеральная строка состоит из последовательности символов, заключенных в кавычки, и представляется в памяти как массив элементов типа char, инициализируемый указанной последовательностью символов.

Значением литеральной строки является адрес первого элемента строки и синтаксически литеральная строка является немодифицируемым указателем на тип char. Литеральные строки могут быть использованы в качестве операндов в выражениях, допускающих величины типа указателей. Но т. к. строки не являются переменными, их нельзя использовать в левой части операции присваивания.

Следует помнить, что последним символом строки всегда является '\0', который автоматически добавляется при хранении строки в памяти.

Идентификаторы переменных и функций. Каждый идентификатор имеет тип, который устанавливается при его объявлении или определении.

Значение идентификатора зависит от типа следующим образом:

— идентификаторы переменных целых и плавающих типов представляют значения соответствующего типа;

— идентификатор переменной типа enum представлен значением одной константы из множества значений констант, указанных в перечислении. Значением идентификатора является константное значение. Тип значения — int, что следует из определения перечисления;

— идентификатор переменной типа struct или union представляет значение, определенное структурой или объединением;

— идентификатор, объявляемый как указатель, представляет указатель на значение, заданное в объявлении типа;

— идентификатор, объявляемый как массив, представляет указатель, значение которого является адресом первого элемента массива. Тип адресуемых указателем величин — это тип элементов массива. Отметим, что адрес массива не может быть изменен во время выполнения программы, хотя значение отдельных элементов может изменяться.

Значение указателя, представляемое идентификатором массива, не является переменной, и поэтому идентификатор массива не может появляться в левой части оператора присваивания;

— идентификатор, объявляемый как функция, представляет указатель, значение которого является адресом функции, возвращающей значения определенного типа и могущей иметь параметры определенного типа. Адрес функции не изменяется во время выполнения программы, меняется только возвращаемое значение. Таким образом, идентификаторы функций не могут появляться в левой части операции присваивания.

Вызов функции состоит из выражения, за которым следует необязательный список выражений в круглых скобках:

Выражение1 '('[Список выражений]')'

Значением Выражения1 должен быть адрес функции (например, ее идентификатор). Значения каждого выражения из Списка выражений передаются в функцию в качестве фактического аргумента. Операнд, являющийся вызовом функции, имеет тип и значение возвращаемого функцией значения.

Индексное выражение задает элемент массива и имеет вид:

Выражение 1 '[' Выражение2 ']'

Тип индексного выражения совпадает с типом элементов массива, а значение представляет величину, адрес которой вычисляется с помощью

Значений Выражение 1 и Выражение2.

Обычно Выражение1 — это указатель, например, идентификатор массива, а Выражение2 — это целочисленная величина. Однако требуется только, чтобы одно из выражений было указателем, а второе целочисленной величиной. Поэтому Выражение1 может быть целочисленной величиной, а Выражение2 — указателем. В любом случае Выражение2 должно быть заключено в квадратные скобки. Хотя индексное выражение обычно используется для ссылок на элементы массива, тем не менее, индекс может появляться с любым указателем.

Перейти на страницу:

Поиск

Похожие книги