- •Данных. Составные структуры данных
- •3.2.1 Общие положения
- •3.2.1.1 Алфавит языка
- •3.2.1.2 Формат программы
- •3.2.1.3. Комментарии
- •// Пример однострочного комментария
- •3.2.1.4 Зарезервированные слова
- •3.2.2 Данные
- •3.2.2.1 Идентификаторы данных
- •3.2.2.2 Типы данных
- •3.2.2.3 Постоянные
- •3.2.2.4 Переменные
- •3.2.2.5 Массивы
- •3.2.2.6 Структуры
- •3.2.2.7 Объединения
- •Масив X:
- •Адреса элементу:
- •Масив y:
- •3.2.2.8 Перечисления
- •3.2.2.9 Указатели
- •Int Hour;
- •Int Press;
- •3.2.2.9.1 Динамическое выделения памяти для хранения данных
- •3.2.2.9.2 Динамическое освобождение памяти от хранимых данных
- •3.2.2.9.3 Ссылка
- •3.2.2.10 Множества
- •3.2.3 Выражения
- •3.2.3.1 Арифметические операции
- •Char int float | signed unsigned | short (базовый) long
- •3.2.3.2 Битовые операции
- •3.2.3.2 Логические операции
- •3.2.3.4 Операции отношения
- •3.2.3.5 Операция присваивания
- •3.2.3.6 Специальные операции
- •3.2.3.7 Элементарные функции
- •3.8 Приведение типов данных
- •3.2.3.9 Приоритеты операций
- •3.2.3.10 Адресные выражения
3.2.3.6 Специальные операции
Специальной операцией называется операция, которая определяется правилом:
специальная операция ::= «,»(следование) | «?:»(решение) | sizeof(размер) |
«.»(доступ) | «»(ссылка) | &(получение адреса) | *(разыменование адреса)12 | «::»(разрешение области видимости)13;
Операция «,» (следование) определяется правилом:
операция «следование» ::= выражение, «,», выражение, {«,», выражение };
Значения выражений вычисляются слева – направо. Тип и значение результата вычисления выражения определяются типом и значением самого правого выражения. Например:
i = 2, j = 6 // присваивание i=2 и j=6; значением всего выражения является 6
k = ( i++, j- - ) // для i=2 и j=6 результат вычисления выражения: k = 6, i = 3, j = 5.
Операция «?:» (решение) – это трёхместная14 операция, которая определяется правилом:
операция «решение» ::=
выражение-условие, ?, выражение-результат1, «:», выражение-результат2;
Выражение-условие – это выражение, результат вычисления которого трактуется как данное логического типа. Результат выполнения операции зависит от значения выражения-условия: если это значение true, то результатом выполнения операции является значение выражения1, в противном случае – значение выражения2. Например:
k = X ? -3 : 8; // если X 0 (т.е. true), то k = -3, в противном случае k = 8
Операция sizeof (размер) определяется правилом:
операция sizeof ::= sizeof, данное | sizeof, «(», (тип данного | выражение), «)»;
Операция sizeof применяется для определения размера в байтах: данного, типа данного или типа результата вычисления некоторого выражения.
Следует учесть, что размер типа данного может изменяться в зависимости от архитектуры компьютера, реализации системы программирования и версии исполняющей операционной системы. Поэтому, для определения истииного размера типа данного можно и нужно использовать операцию sizeof.
Если операндом операции sizeof является скаляр, то возвращается объем памяти, занимаемый скаляром. Если операндом операции sizeof является указатель (на любое данное), то возвращается размер указателя (но не данного, на которое он ссылается!).
Если операндом является агрегат, то возвращается суммарный объем памяти, занимаемый всеми элементами агрегата.
Примеры:
int X [12]; // объявление агрегата – массива X sizeof (X) // определение размера массива X возвращает 48 (т.е. 12элементов · 4байта на элемент)
sizeof (int) // определение размера типа int возвращает 4
sizeof (32.12 / 2) // определение размера типа выражения (32.12 / 2) возвращает 8
Доступ к элементам структур и объединений может осуществляться с помощью операций: «.» (доступ) и «»(ссылка). Если доступ к элементу структуры или объединения осуществляется непосредственно, то используется операция «.». Если доступ к элементу структуры или объединения опосредован через указатель на структуру или объединение, то используется операция «».
При работе с указателями используются операции: & (адрес) – для получения адреса данного, и * (разыменование адреса) – для обращения к данному по его адресу. Применение этих операций при работе с указателями рассмотрено в разд. 3.2.2.9, 3.2.3.10.
