Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624.15 Кб
Скачать

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 является указатель (на любое данное), то возвращается размер указателя (но не данного, на которое он ссылается!).

Если операндом является агрегат, то возвращается суммарный объем памяти, занимаемый всеми элементами агрегата.

Примеры:

  1. int X [12]; // объявление агрегата – массива X sizeof (X) // определение размера массива X возвращает 48 (т.е. 12элементов · 4байта на элемент)

  2. sizeof (int) // определение размера типа int возвращает 4

  3. sizeof (32.12 / 2) // определение размера типа выражения (32.12 / 2) возвращает 8

Доступ к элементам структур и объединений может осуществляться с помощью опера­ций: «.» (доступ) и «»(ссылка). Если доступ к элементу структуры или объединения осуществ­ляется непосредственно, то используется операция «.». Если доступ к элементу структуры или объединения опосредован через указатель на структуру или объединение, то используется операция «».

При работе с указателями ис­пользуются операции: & (адрес) – для получения адреса данного, и * (разыменование адреса) – для обращения к данному по его адресу. Применение этих операций при работе с указателями рассмот­рено в разд. 3.2.2.9, 3.2.3.10.