Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
04-09-2015_19-17-13 / Конспект лекций.doc
Скачиваний:
98
Добавлен:
01.03.2016
Размер:
1.31 Mб
Скачать

3.4 Приоритеты операций

В языке СИ++ операции с высшими приоритетами вычисляются первыми. Наивысшим приоритетом является приоритет равный 1. Приоритеты и порядок операций приведены в таблице:

Приоритет

Знак операции

Типы операции

Порядок выполнения

1

() [] . -> ::

Выражение

Слева направо

2

! ~ + - ++ -- & * (тип) sizeof new delete тип()

Унарные

Справа налево

3

.* ->*

Слева направо

4

* / %

Мультипликативные

Слева направо

5

+ -

Аддитивные

6

<< >>

Сдвиг

7

< > <= >=

Отношение

8

== !=

Отношение (равенство)

9

&

Поразрядное И

10

^

Поразрядное исключающее ИЛИ

11

|

Поразрядное ИЛИ

12

&&

Логическое И

13

||

Логическое ИЛИ

14

? :

Условная

15

= *= /= %= += -= &= |= >>= <<= ^=

Простое и составное присваивание

Справа налево

16

,

Последовательное вычисление

Слева направо

4. Переменные. Определения и описания. Спецификатор typedef.

4.1 Переменные. Определения и описания.

В пособиях по языкам программирования переменную чаще всего определяют как пару "имя" - "значение". Имени соответствует адрес (ссылка) на участок памяти, выделенный переменной, а значением является содержимое этого участка. Именем служит идентификатор, а значение соответствует типу переменной, определяющему множество допустимых значений и набор операций, для которых переменная может служить операндом.

Множество допустимых значений переменной обычно совпадает со множеством допустимых констант того же типа. Таким образом, вводятся вещественные, целые и символьные переменные, причем символьные (char) иногда относят к целым. Целочисленные и вещественные считаются арифметическими типами. Арифметический (включая символьный) тип является частным случаем скалярных типов. К скалярным типам кроме арифметических относятся указатели, ссылки и перечисления.

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

Все взаимосвязанные атрибуты объектов (тип, класс памяти, область (сфера) действия имени, видимость, продолжительность существования, тип компоновки) приписываются объекту с помощью определений и описаний, а также контекстом, в котором эти определения и описания появляются. Определения устанавливают атрибуты объектов, резервируют для них память и связывают эти объекты с именами (идентификаторами). Кроме определений, в тексте программы могут присутствовать описания, каждое из которых делает указанные в них идентификаторы известными компилятору. В переводной литературе и особенно в документации наряду с терминами "описание" и "определение" используют "объявление" и "декларация".

Итак, появление двух терминов "определение" и "описание" объясняется тем фактом, что каждый конкретный объект может быть многократно описан, однако в программе должно быть только единственное определение этого объекта. Определение обычно выделяет объекту память и связывает с этим объектом идентификатор – имя объекта, а описания только сообщают свойства того объекта, к которому относится имя. Говорят, что описание ассоциирует тип с именем, а определение, кроме того, задает все другие свойства (объем памяти, внутреннее представление и т.д.) объекта и выполняет его инициализацию. В большинстве случаев описание одновременно является и определением. Однако это не всегда возможно и не всегда требуется. Определять и описывать можно следующие объекты:

• переменные;

• функции;

• классы, их компоненты и указатели на компоненты;

• типы, вводимые пользователем с помощью typedef;

• типы и имена структур, объединений, перечислений;

• компоненты (элементы) структур и объединений;

• массивы объектов заданного типа;

• перечислимые константы;

• метки операторов;

• макросы препроцессора;

• указатели на объекты или функции заданного типа;

• ссылки на объекты или функции заданного типа;

• константы (значения) заданного типа.

Определение переменных заданного типа имеет следующий формат:

[спецафикатор-класа-памяти] [модификатор] тип имя [=инициатор] [,имя [= инициатор] ]...

где

спецификатор класса памяти - (auto, static, extern, register, typedef)

модификатор - const или volatile;

тип- один из основных типов;

имя - идентификатор;

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

Для определения и описания переменных основных типов используются следующие ключевые слова, каждое из которых в отдельности может выступать в качестве имени типа:

• char (символьный);

• short (короткий целый);

• int (целый);

• long (длинный целый);

• float (вещественный);

• double (вещественный с удвоенной точностью);

• void (отсутствие значения).

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

long double zebra, atop;

вводит переменные с именами zebra и atop вещественного типа повышенной точности, но явно не присваивает этим переменным никаких начальных значений.

Употребляемые как отдельно, так и вместе с другими именами типов служебные слова unsigned (беззнаковый) и signed (знаковый) позволяют для арифметического или символьного типа выбирать способ учета знакового разряда:

unsigned int i, j // Значения от 0 до 65535

unsigned long L, It ,N; // Значения от О до 4294967265

unsigned char с, s; // Значения от 0 до 255

Применение в определениях типов отдельных служебных слов int, char, short, long эквивалентно signed int, signed char, signed short, signed long. Именно поэтому служебное слова signed обычно опускается в определениях и описаниях. Использование при задании типа только одного unsigned эквивалентно unsigned int.

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

typedef unsigned char COD;

COD simbol;

введен новый тип COD - сокращенное обозначение для unsigned char и переменная этого типа simbol, значениями которой являются беззнаковые числа в диапазоне от 0 до 255.

Рассматривая переменные, мы пока использовали базовые (предопределенные целиком или фундаментальные) типы.

Соседние файлы в папке 04-09-2015_19-17-13