
- •Данных. Составные структуры данных
- •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.2.3 Постоянные
Постоянной называется неидентифицированный или идентифицированный скалярный фрагмент памяти3, содержимое которого не может быть изменено во время исполнения программы.
Постоянная определяется правилом:
постоянная ::= постоянная логического типа | постоянная символьного типа |
постоянная целого типа | постоянная действительного типа |
постоянная строкового типа;
Постоянная логического типа определяется правилом:
постоянная логического типа ::= (true | TRUE)(истина) | (false | FALSE)(ложь);
Постоянная символьного типа определяется правилами:
символ национального алфавита ::=
А | а |Б |б |В |в |Г| |г| Ґ| ґ| Д| д |Е |е |Є |є |Ж |ж |З| з |И |и |І |і |Ї |ї | Й |й |К |к |Л |л |М |м |Н |н |
О |о | П |п |Р |р |С |с |Т |т |У |у |Ф |ф |Х |х | Ц |ц |Ч |ч |Ш |ш |Щ |щ |Ь| ь |Ю |ю |Я |я;
escape-последовательность(рис. 4.1)::=
одиночная escape-последовательность |
восьмеричная escape-последовательность |
шестнадцатиричная escape-последовательность;
одиночная escape-последовательность ::= \’ | \” | \? | \\ | \a | \b | \f | \n | \r | \t | \v;
восьмеричная escape-последовательность ::=
«\»,восьмеричная цифра, [восьмеричная цифра, [восьмеричная цифра] ];
шестнадцатиричная escape-последовательность ::= (\x | \X), шестнадцатиричная
цифра, [шестнадцатиричная цифра, [шестнадцатиричная цифра] ];
постоянная символьного типа ::=
[L], «‘», ( { символ алфавита | символ национального алфавита | escape-последовательность | символ UNICODE4 | } ), «‘»;
Если символьная постоянная содержит один символ, то она считается данным типа char, в противном случае – данным типа int. Если запись постоянной начинается с префикса «L», то она считается данным типа wchar_t («широкий символ»). Примеры постоянных символьного типа: ‘A’, ‘i’, ‘\n’, L’\x004d’(символ ‘M’).
Постоянная целого типа определяется правилом:
постоянная целого типа ::=
[знак], [0, восьмеричная цифра, { восьмеричная цифра }], [U | u] (unsigned), [L | l](long) |
[знак], [десятичная цифра, { десятичная цифра }, [U | u], [L | l] |
[знак], [(0x | 0X)] шестнадцатиричная цифра, { шестнадцатиричная цифра },
[U | u], [L | l];
Примеры постоянных целого типа: -19(десятичная), 017(восьмеричная), 0x1f(шестнадцатиричная), 1234L(десятичная четырехбайтовая).
Постоянная действительного (вещественного) типа определяется правилами:
целое ::= десятичная цифра, { десятичная цифра };
дробная часть ::= { целое }, [ [e | E] [знак], целое];
постоянная действительного типа ::=
[знак], [целое], «.», [дробная часть], [F | f](float), [L | l](long double);
Считается, что постоянная действительного типа имеет тип double, если в ее записи не использован суффикс явного определения типа (F, f, L, l). Например, описание -0.2E+6F задает отрицательную действительную постоянную -200 000.0 типа float. Примеры постоянных действительного типа: 1.2, -.6(0,6), 1.2e2(120.0).
Постоянная строкового типа определяется правилами:
постоянная строкового типа::=
[L], { ", { символ алфавита | символ национального алфавита | escape-последовательность | символ UNICODE}, " };
Если запись постоянной начинается с префикса «L», то все символы строки считаются данными типа wchar_t («широкий символ»), в противном случае - данными типа char. Длина построянной строкового типа на 1 больше количества записанных в ней символов, поскольку транслятор добавляет в конец такой константы нуль-терминатор «\0» как признак окончания строки (рисунок 3.2.1).
Рисунок 3.2.1
Две постоянных строкового типа, записанные подряд, автоматически объединяются в одну (например, "Здравствуй," " мир!" преобразовывается в "Здравствуй, мир!". Постоянную строкового типа можно записывать в нескольких смежных строках, разделяя строки символом «\», например, так:
“Добридень. \
Можна починати роботу.”.
Другие примеры постоянных строкового типа: “Первая строка\nВторая строка”, L“Hello, \004dартин”(“Hello, Мартин”).
Для использования в программе идентифицированных постоянных их объявляют согласно правилам:
инициализатор ::= постоянная;
объявление постоянных ::= const,
[тип данного], идентификатор, = инициализатор,
{ «,»,[тип данного], идентификатор, = инициализатор }«;»;
Постоянную при объявлении обязательно нужно инициализировать (т.е. присвоить ей значение), например: const int a=10;.
Идентифицированные постоянные в языке С++ могут быть типизированные и нетипизированными. Типизированная постоянная - это именованная постоянная, тип значения которой задан явно. Нетипизированная постоянная - это именованная постоянная, тип значения которой в объявлении не указан и определяется автоматически по её инициализатору. Примеры объявлений постоянных:
const float pi = 3.141592; // постонная «pi» () типа «float»
const MaxInt = 32767; // постоянная «MaxInt» типа «int»
const Ch = ‘Б’; // постоянная «Ch» типа «int»
const double X=1.2, Y=3.4; // постоянные «X» и «Y» типа «double»