Строковый тип данных предназначен для хранения последовательности букв, цифр и других символов. Обычная строка представляет собой не что иное, как массив символьных значений плюс некоторая служебная информация. В Delphi реализовано четыре основных строковых типа.
Исторически в Delphi 1.0 появился тип данных ShortString. В памяти компьютера она представляет собой цепочку байтов, причем в первом байте содер-
жится значение длины текстовой строки, а в остальных - непосредственно информация. Другими словами, если вас зовут «Петя» (что составляет 4 символа), то в служебном байте окажется четверка, а в оставшихся четырех байтах - соответственно символы «П», «е», «т» и «я».
Физический формат строки AnsiString значительно сложнее. Официальная информация о том, каким образом создатели Delphi организовали хранение данных в этом типе строки, отсутствует. (Это говорит о том, что Borland оставляет за собой право изменять внутренний формат строки такого типа.) Однако серьезный программист обязан знать о следующих особенностях физического формата AnsiString.
Во-первых, это строка, заканчивающаяся нулем, - в самом последнем байте этой строки окажется символ #0. Во-вторых, форматом строки предусмотрена область, хранящая данные о количестве ссылок на эту строку. Благодаря тому что строка завершается нулевым символом, она прекрасно взаимодействует с функциями Windows API, а из-за наличия счетчика ссылок (хранящего данные о том, сколько строковых переменных ссылаются на одно и то же место в памяти) значительно упрощается операция копирования строки из переменной в переменную. В этом случае просто копируется указатель и осуществляется приращение счетчика ссылок.
Строки WideSt ring предназначены для работы с 16-битными символами, т. е. здесь на каждый символ отводится два байта. Таким образом, тип данных WideSt ring способен работать с символами из таблицы Unicode (UCS-2). Unicode -стандарт, рожденный в недрах Apple и Xerox в 1988 г. Спустя три года для совершенствования и внедрения Unicode был создан консорциум, в состав которого вошли более десятка ключевых компаний, в том числе и Microsoft.
Поскольку на каждый символ отводится два байта, Unicode позволяет кодировать 65 536 символов, что более чем достаточно для работы с любым языком. Поэтому разработчики Unicode решили определить местоположение символов каждого из ключевых мировых языков (табл. 1.7) и расширить набор символов огромным количеством технических символов. На сегодняшний день определено около 35 тысяч кодовых позиций и еще около 30 тысяч позиций свободны.
При объявлении переменной строкового типа допускается явным образом ограничить ее длину, для чего в квадратных скобках указывают количество символов в строке:
var Name : string[40];
Объявленная таким образом переменная занимает в памяти количество байт, равное длине строки + 1 байт.
Структурные типы
Основное назначение структурных типов - совместное хранение множества однотипных или разнотипных значений. Различают следующие разновидности структурных типов:
• массивы • множества • классы
• записи • файлы • указатели на классы
Первые три типа будут рассмотрены в этой главе, а файлы, классы и указатели на классы - несколько позже.