Строковые типы
В выражениях Delphi поддерживает три физических строковых формата:
короткий (ShortString), длинный (LongString)
и широкий (WideString). Их можно комбинировать в
операторах присваивания и выражениях (все необходимые преобразования Delphi выполняет автоматически).
Переменные типов AnsiString и WideString — это динамически распределяемые массивы
символов, максимальная длина которых ограничивается только наличием памяти.
Разница между ними состоит в том, что в AnsiString
знаки записываются в формате char, а в WideString— в формате WideChar.
Обычно вполне достаточно одного типа AnsiString,
однако при работе с международными наборами символов, такими как UNICODE,
удобнее использовать WideString.
Тип ShortString—это, по существу,
массив Array [0..255] of char. Первый его элемент задает динамическую длину строки,
которая может принимать значения от 0 до 255 символов. Символы, составляющие
строку, занимают места от 1 до 255. Тип ShortString
предназначен, в основном, для обеспечения совместимости с ранними версиями Delphi и Borland Pascal.
Логический строковый тип именуется просто String. Отнесение его к типу AnsiString
или ShortString задается командой $Н. По умолчанию
задается { $Н+}, и String
совпадает с AnsiString. Если задать команду {$Н- }, то String будет совпадать с ShortString и иметь максимальную длину, равную 255
символам.
Для совместимости с другими языками программирования в Delphi поддерживается класс строк
с конечным нулем. Зарезервированных слов или идентификаторов для этого класса
не существует.
Строки с конечным нулем состоят из ненулевых символов и
оканчиваются символом с порядковым номером 0 (#0). В отличие от типов AnsiString, ShortString и WideString, строки с нулевым окончанием не имеют указателя
длины. Конец в этих стооках обозначается нулем.
Физически строки с нуль-окончанием
подобны массивам символов с нумерацией элементов от нуля, наподобие array [ 0 . . X] of char, где Х — некоторое
положительное целое, большее нуля, хотя никаких объявлении подобного рода не
происходит. Вместо этого определяется переменная-указатель PChar
и распределяется необходимый объем памяти. При необходимости строке AnsiString можно присвоить тип PChar.
Функция |
Описание |
Concat(sl, s2, s3) |
Возвращает последовательное
соединение строк. Эквивалентна оператору sl+s2+s3 |
Copy(s, pos,
len) |
Возвращает подстроку длиной
максимум len символов, начинающуюся в позиции pos строки s |
Delete(s, pos,
len) |
Удаляет максимум len символов из строки s,
начиная с позиции pos |
Insert(sourse,
tar-get, pos) |
Вставляет строку source в строковую переменную target,
начиная с позиции pos |
Length (s) |
Возвращает динамическую длину
строки. Подобна функциям LEN в Basic
и strlen — в C/C++ |
Pos(substring, s) |
Возвращает место первого
вхождения подстроки substring в строку s. Подобна функциям SUBSTR в Basic и strstr () — в C/C++ |
SetLength(s, newlen) |
Задает новую динамическую длину newlen строковой переменной s |
SetString |
Задает содержимое и длину строки |
Str(x, s) |
Преобразует численное значение х в строковую переменную s |
StringOfChars |
Возвращает строку с конкретным
числом символов |
UniqueString |
Делает данную строку уникальной
со счетом обращений 1 |
Val (s, v,
code) |
Преобразует строку s в соответствующее численное представление v |
Указательные типы
Переменная указательного типа содержит
значение, указывающее на переменную обычного типа — адрес этой переменной
(табл. 1.8).
pointer
// Указатель без типа.
^typel //
Указатель с типом.
Если исходный тип (тип переменной, на
которую должен ссылаться указатель) еще не объявлен, его надо объявить в том же
разделе объявления типов, что и тип указателя.
Только исходный тип указателей может совпадать с собственно
типом.
Средство |
Описание |
New |
Распределяет новый участок
динамической памяти и записывает его адрес в переменную указательного типа |
Оператор @ |
Направляет переменную-указатель
на область памяти, содержащую любую существующую переменную, процедуру или
функцию, включая переменные, имеющие идентификаторы |
GetMem |
Создает новую динамическую
переменную заданного объема и записывает ее адрес в переменную указательного
типа |
Указатели и адресные
функции
Информация, содержащаяся в переменной указательного типа, —
это адрес некоторого участка в машинной памяти. Эти значения задаются во время
работы программы и могут меняться от одного запуска к другому. Следующие
функции обеспечивают доступ к адресной информации в программе и тестирование
переменных-указателей.
Функция |
Описание |
Addr |
Возвращает адрес указанного
объекта |
Assigned |
Проверяет, равно ли значение
процедурной функции Nil |
Ptr |
Преобразует адрес в указатель |
Зарезервированное слово Nil указывает значение
указателя, который ни на что не указывает. Такие указатели называют
неопределенными. В Object Pascal
только при определении указателей можно нарушать правило, по которому все
указываемые идентификаторы, в том числе идентификаторы типов, должны быть
объявлены выше. Здесь можно указать идентификатор еще необъявленного типа, как
в следующем примере:
type
PointerType
= ^NotYetDefinedType;
Однако
необъявленный тип необходимо объявить ниже в том же блоке объявления типов.
Определенный в Object Pascal тип Pointer— это указатель
без типа. Обратиться к переменной через такой указатель невозможно (к переменной
типа Pointer нельзя дописывать символ "^").
Однако можно задать ей другой указательный тип.
По значениям переменных тип Pointer
совместим с остальными указательными типами.