Используемые символы

Элементы Языка СИ

Брайэн Керниган

Инициализация массивов

Массивы объектов уже рассматривались в гл. 3. Для инициализации массива любого типа используется стандартный синтаксис, унаследованный из языка С.

int Table [5] = {1, 2, 3, 4, 5};

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

CCurrency Money (95, 34);CCurrency MoneyTable [5] = { Money, CCurrency (15, 94), 10L, 12.23, };

Первый элемент (MoneyTable [0]) инициализируется существующим объектом класса CCurrency с помощью конструктора копирования; второй – инициализируется конструктором, создающим временный объект класса CCurrency (затем данный объект используется для инициализации элемента массива также конструктором копирования); третий – инициализируется константой типа long с помощью конструктора преобразования с параметром типа long; четверили – константой типа double с помощью другого конструктора преобразования. Последний элемент массива инициализируется неявно; следовательно, для него компилятор вызывает конструктор по умолчанию.

Как упоминалось в гл. 2, нельзя явно инициализировать массив объектов, созданных динамически с помощью оператора new. Вместо этого компилятор вызывает конструктор по умолчанию для каждого элемента.

 

Множество символов используемых в языке СИ можно разделить на пять групп.

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

Таблица 1

Прописные буквы латинского алфавита A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Строчные буквы латинского алфавита a b c d e f g h i j k l m n o p q r s t u v w x y z
Символ подчеркивания _

2. Группа прописных и строчных букв русского алфавита и арабские цифры (табл.2).

Таблица 2

Прописные буквы русского алфавита А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я
Строчные буквы русского алфавита а б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
Арабские цифры 0 1 2 3 4 5 6 7 8 9

3. Знаки нумерации и специальные символы (табл. 3). Эти символы используются с одной стороны для организации процесса вычислений, а с другой – для передачи компилятору определенного набора инструкций.

Таблица 3

Символ Наименование Символ Наименование
, запятая ) круглая скобка правая
. точка ( круглая скобка левая
; точка с запятой } фигурная скобка правая
: двоеточие { фигурная скобка левая
? вопросительный знак < меньше
' апостроф > больше
! восклицательный знак [ квадратная скобка
| вертикальная черта ] квадратная скобка
/ дробная черта # номер
\ обратная черта % процент
~ тильда & амперсанд
* звездочка ^ логическое не
+ плюс = равно
- мину " кавычки

4. Управляющие и разделительные символы. К той группе символов относятся: пробел, символы табуляции, перевода строки, возврата каретки, новая страница и новая строка. Эти символы отделяют друг от друга объекты, определяемые пользователем, к которым относятся константы и идентификаторы. Последовательность разделительных символов рассматривается компилятором как один символ (последовательность пробелов).

5. Кроме выделенных групп символов в языке СИ широко используются так называемые, управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность строится на основе использования обратной дробной черты (\) (обязательный первый символ) и комбинацией латинских букв и цифр (табл.4).

Таблица 4

Управляющая последовательность Наименование Шеснадцатеричная замена
\a Звонок
\b Возврат на шаг
\t Горизонтальная табуляция
\n Переход на новую строку 00A
\v Вертикальная табуляция 00B
\r Возврат каретки 00C
\f Перевод формата 00D
\" Кавычки
\' Апостроф
\0 Ноль-символ
\\ Обратная дробная черта 05C
\ddd Символ набора кодов ПЭВМ в восьмеричном представлении  
\xddd Символ набора кодов ПЭВМ в шестнадцатеричном представлении  

Последовательности вида \ddd и \xddd (здесь d обозначает цифру) позволяет представить символ из набора кодов ПЭВМ как последовательность восьмеричных или шестнадцатеричных цифр соответственно. Например, символ возврата каретки может быть представлен различными способами:

\r – общая управляющая последовательность,

\015 – восьмеричная управляющая последовательность,

\x00D – шестнадцатеричная управляющая последовательность.

Следует отметить, что в строковых константах всегда обязательно задавать все три цифры в управляющей последовательности. Например, отдельную управляющую последовательность \n (переход на новую строку) можно представить как \010 или \xA, но в строковых константах необходимо задавать все три цифры, в противном случае символ или символы следующие за управляющей последовательностью будут рассматриваться как ее недостающая часть. Например:

"ABCDE\x009FGH" данная строковая команда будет напечатана с использованием определенных функций языка СИ, как два слова ABCDE FGH, разделенные 8-ю пробелами. В этом случае, если указать неполную управляющую строку"ABCDE\x09FGH",то на печати появится ABCDE=|=GH, так как компилятор воспримет последовательность \x09F как символ "=|=".

Отметим тот факт, что, если обратная дробная черта предшествует символу, не являющемуся управляющей последовательностью (т.е. не включенному в табл.4) и не являющемуся цифрой, то эта черта игнорируется, а сам символ представляется как литеральный. Например: символ \h представляется символом h в строковой или символьной константе.

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