Константы

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

Ø Символьные константы и ESC - последовательности.

Символьные константы - это буква, цифра, знак пунктуации или ESC - символ, заключенные в одиночные кавычки. Величина константы - символа равна значению представляющего ее кода символа.

Константа имеет следующую форму представления:

'<char>',

где <char> может быть любым символом из множества представимых символов, включая любой ESC - символ, исключая одиночную кавычку ('), наклонную черту влево (\) и символ новой строки.

Чтобы использовать одиночную кавычку или наклонную черту влево в качестве константы-символа, необходимо вставить перед этими знаками наклонную черту влево.

Константа Название величины
'a' '?' Малая буква а Знак вопроса
  '0x1B'   ASCII ESC- символ
'\'' Одиночная кавычка
'\\' Наклонная черта влево

Константы символов имеют целый тип.

ESC - последовательности - это специальные символьные комбинации, которые представляют пробельные символы и неграфические символы в строках и символьных константах.

Их типичное использование связано со спецификацией таких действий, как возврат каретки и табуляция, а также для задания литеральных представлений символов, таких как символ двойная кавычка. ESC-последовательность состоит из наклонной черты влево, за которой следует буква, знаки пунктуации ' " \ или комбинация цифр. Ниже приведен список ESC- последовательностей языка Си.

ESC Последовательность Наименование
\n \t \v \b \r \f \a \' \" \\ \ddd \xdd Новая строка Горизонтальная табуляция Вертикальная табуляция Забой Back space Возврат каретки Новая страница Звонок(сигнал) Одиночная кавычка Двойная кавычка Наклонная черта влево ASCII символ в восьмеричном представлении ASCII символ в шестнадцатеричном представлении

Если наклонная черта влево предшествует символу, не включенному в этот список, то наклонная черта влево игнорируется, а символ представляется как литеральный. Например, изображение \c

представляет символ "c" в литеральной строке или константе-символе.

Последовательности \ddd и \xdd позволяют задать любой символ в ASCII (Американский стандартный код информационного интерфейса) как последовательность трех восьмеричных цифр или двух шестнадцатеричных цифр. Например, символ пробела может быть задан как \010 или \x08. Код ASCII "нуль" может быть задан как \0 или \x0. В восьмеричной ESC- последовательности могут быть использованы от одной до трех восьмеричных цифр.

Например, символ пробела может быть задан как \10. Точно так же, в шестнадцатеричной ESC - последовательности могут быть использованы от одной до двух шестнадцатеричных цифр. Так, шестнадцатеричная последовательность для символа пробела может быть задана как \x08 или \x8.

Замечание:

Когда используется восьмеричная или шестнадцатеричная ESC- последовательность в строках, то нужно полностью задавать все цифры ESC- последовательности (три цифры для восьмеричной и две цифры для шестнадцатеричной ESC- последовательностей). Иначе, если символ непосредственно следующий за ESC- последовательностью, случайно окажется восьмеричной или шестнадцатеричной цифрой, то он будет интерпретирован как часть последовательности. Например, строка \x7Bell при выводе на печать будет выглядеть как ell, поскольку \x7B интерпретируется как символ левой фигурной скобки {. Строка \x07Bell будет правильным представлением символа "звонок" с последующим словом Bell.

ESC - последовательности позволяют посылать неграфические управляющие символы к внешним устройствам. Неграфические символы всегда должны представляться ESC - последовательностями, поскольку, непосредственное использование в программах на Си неграфических символов будет иметь непредсказуемый результат.

Наклонная черта влево (\) помимо определения ESC -последовательностей используется также, как символ продолжения строки в препроцессорных определениях.

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

Ø Целые константы

Целая константа - это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину. Основание определяется префиксом в записи константы.

Десятичная константа имеет следующий формат представления:

<digits>,

где <digits> - это одна или более десятичных цифр от 0 до 9.

Восьмеричная константа имеет следующий формат представления:

0<odigits>,

где <odigits> - это одна или более восьмеричных цифр от 0 до 7. Запись ведущего нуля необходима.

Шестнадцатеричная константа имеет один из следующих форматов представления:

0x<hdigits>

0X<hdigits>,

где <hdigits> одна или более шестнадцатеричных цифр.

Шестнадцатеричная цифра может быть цифрой от 0 до 9 или буквой (большой или малой) от A до F. В представлении константы допускается "смесь" больших и малых букв. Запись ведущего нуля и следующего за ним символа x или X необходима.

Пробельные символы не допускаются между цифрами целой константы. Ниже иллюстрируются примеры целых констант.

_______________________________________________________

Десятичные Восьмеричные Шестнадцатеричные

константы константы константы________

10 012 0xa или 0xA

132 0204 0x84

32179 076663 0x7dB3 или 0x7DB3

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

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

Восьмеричные и шестнадцатеричные константы в зависимости от размера могут быть типа int, unsigned int, long или unsigned long. Если константа может быть представлена как int, она специфицируется типом int. Если ее величина больше, чем максимальная положительная величина, которая может быть представлена типом int, но меньше величины, которая представляется в том же самом числе бит как и int, она задается типом unsigned int. Наконец, константа, величина которой больше чем максимальная величина, представляемая типом unsigned int, задается типом long или unsigned long, если это необходимо

Важность рассмотренных выше правил состоит в том, что восьмеричные и шестнадцатеричные константы не содержат "знаковых" расширений, когда они преобразуются к более длинным типам. Программист может определить для любой целой константы тип long, приписав букву "l" или "L" в конец константы. Далее показаны примеры целых констант.

_________________________________________________________

Десятичные Восьмеричные Шестнадцатеричные

константы константы константы_________

10L 012L 0xaL или 0xAL

79l 0115l 0x4fl или 0x4Fl___

Ø Вещественные константы или константы с плавающей точкой

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

[<digits>][.<digits>][E[-]<digits>],

где <digits> - одна или более десятичных цифр (от 0 до 9), а E или e -символ экспоненты. Целая или дробная части константы могут быть опушены, но не обе сразу. Десятичная точка может быть опущена только тогда, когда задана экспонента.

Экспонента состоит из символа экспоненты, за которым следует целочисленная величина экспоненты, возможно отрицательная.

Пробельные символы не могут разделять цифры или символы константы.

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

Примеры констант с плавающей точкой и константных выражений:

15.75

1.575E1

1575e-2

-0.0025

-2.5e-3

25e-4

Целая часть константы с плавающей точкой может быть опущена, например:

.75.0075e2 -.125 -.175E-2

Все константы с плавающей точкой имеют тип double.

Ø Константы перечисляемого типа

Целочисленные именованные константы можно вводить с помощью перечисления:

enum тип_перечисления {список_именованных_констант},

где enum - служебное слово, вводящее перечисление;

тип_перечисления - его название - необязательный пpoизвoльный идентификатор;

cnucoк_uмeнoвaнныx_кoнcmaнmсписок_именованных_констант - разделенная запятыми последовательность идентификаторов или именованных констант вида: имя константы = знaчeнue_кoнcmaнmы

примеры:

enum {ОNE=1, TWO, THREE, FOUR};

enum DAY {SUNDAY, MОNDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};

enum BOOLEAN {NO, YES};

Если в списке нет ни одного элемента со знаком '=', то значения констант начинаются с 0 и увеличиваются на 1 слева направо. таким образом, N0 равно 0, YES равно 1, SUNDAY имеет значение 0 и FRIDAY имеет значение 5. Именованная константа со знаком '=' получает соответствующее значение (ONE=1), а следующие за ней именованные константы без явных значений увеличиваются на 1 каждая. В примере TWO равно 2, THREE равно 3, FOUR равно 4.

Еще пример.

#include <stdio.h>

int main()

{

enum dig {one=1, two, three};

dig digit;

digit = one;

printf("%d %d %d ",one,two,three);

printf(" %d ",digit);

return 0;

}

Ø Нулевой указатель

Null - указатель, называемый нулевым указателем, это единственная неарифметическая константа. В конкретных реализациях null - указатель может быть представлен либо как 0, либо как 0L, либо как именованная константа NULL. здесь нужно отметить, что значение константы NULL не обязано быть нулем и имеет право не совпадать с кодом символа '0'.

Ø Строковые литералы или строки

формально строки (в соответствии со стандартом) не относятся к константам языка Cи, а представляют собой отдельный тип его лексем тем не менее, они обладают всеми свойствами констант.

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

"<characters>",

где <characters> - это нуль или более символов из множества представимых символов, исключая двойную кавычку ("), наклонную черту влево (\) и символ новой строки. Чтобы использовать символ новой строки в строковом литерале, необходимо напечатать наклонную черту влево, а затем символ новой строки.

Наклонная черта влево вместе с символом новой строки будут проигнорированы компилятором, что позволяет формировать строковые литералы, располагаемые более чем в одной строке. Например, строковый литерал:

"Long strings can be bro\

ken into two pieces."

идентичен строке:

"Long strings can be broken into two pieces."

Чтобы использовать двойные кавычки или наклонную черту влево внутри строкового литерала, нужно представить их с предшествующей наклонной чертой влево, как показано в следующем примере:

"This is a string literal"

"First \\ Second"

"\"Yes, I do, \" she said."

"The following line shows a null string:"

""

Заметим, что ESC- символы (такие как \\ и \") могут появляться в строковых литералах. Каждый ESC- символ считается одним отдельным символом.

Символы строки запоминаются в отдельных байтах памяти. Символ null (\0) является отметкой конца строки. Каждая строка в программе рассматривается как отдельный объект. Если в программе содержатся две идентичные строки, то каждая из них будет храниться в отдельном месте памяти.

Строковые литералы имеют тип char[]. Под этим подразумевается, что строка- это массив, элементы которого имеют тип char. Число элементов в массиве равно числу символов в строчном литерале плюс один, поскольку символ null (отметка конца строки) тоже считается элементом массива.

Две строковые константы, между которыми нет других разделителей, кроме обобщенных пробельных символов (пробел, табуляция, конец строки и т.д.), воспринимаются как одна строковая константа. таким образом,

" First " " Second. " воспринимается как одна константа:

" First Second."

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

"Whole royal "

" cavalry, "

" whole royal "

" army"

Эти четыре строковые константы эквивалентны одной:

"Whole royal cavalry, whole royal army."

1.4 Переменные и именованные константы

1.4.1 Переменная как объект

Одним из основных понятий языка C/С++ является объект - именованная область памяти. Частные случаи объектов – переменные и именованные константы. При задании значения переменной в соответствующую ей область памяти помещается код этого значения. Доступ к значению переменной наиболее естественно обеспечивает ее имя, а доступ к участку памяти возможен только по его адресу.

1.4.2 Описание, объявление, определение и инициализация
переменных

Прежде всего, уточним понятия заголовка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: