Кроме стандартных строк ShortString и AnsiString, в языке Delphi поддерживаются нуль-терминированные строки языка C, используемые процедурами и функциями Windows. Нуль-терминированная строка представляет собой индексированный от нуля массив ASCII-символов, заканчивающийся нулевым символом #0. Для поддержки нуль-терминированных строк в языке Delphi введены три указательных типа данных:
type PAnsiChar = ^AnsiChar; PWideChar = ^WideChar; PChar = PAnsiChar; |
Типы PAnsiChar и PWideChar являются фундаментальными и на самом деле используются редко. PChar — это обобщенный тип данных, в основном именно он используется для описания нуль-терминированных строк.
Ниже приведены примеры объявления нуль-терминированных строк в виде типизированных констант и переменных:
const S1: PChar = 'Object Pascal'; // #0 дописывается автоматически S2: array[0..12] of Char = 'Delphi/Kylix'; // #0 дописывается автоматическиvar S3: PChar; |
Переменные типа PChar являются указателями, а не настоящими строками. Поэтому, если переменной типа PChar присвоить значение другой переменной такого же типа, то в результате получится два указателя на одну и ту же строку, а не две копии исходной строки. Например, в результате оператора
переменная S3 получит адрес уже существующей строки 'Object Pascal'.
Для удобной работы с нуль-терминированными строками в языке Delphi предусмотрена директива $EXTENDEDSYNTAX. Если она включена (ON), то появляются следующие дополнительные возможности:
- массив символов, в котором нижний индекс равен 0, совместим с типом PChar;
- строковые константы совместимы с типом PChar.
- указатели типа PChar могут участвовать в операциях сложения и вычитания с целыми числами; допустимо также вычитание (но не сложение!) указателей.
В режиме расширенного синтаксиса допустимы, например, следующие операторы:
S3 := S2; // S3 указывает на строку 'Delphi/Kylix'S3 := S1 + 7; // S3 указывает на подстроку 'Pascal' |
В языке Delphi существует богатый набор процедур и функций для работы с нуль-терминированными строками (см. справочник по среде Delphi).
2.17. Delphi + ассемблер (эта часть пока не нужна)
В процессе разработки программы вы можете неожиданно обнаружить, что описанных выше средств языка Delphi для решения некоторых насущных проблем явно недостаточно. Например, организация критичных по времени вычислений требует использования ассемблера. Кроме того, часто возникает необходимость включить в программу на языке Delphi откомпилированные ранее процедуры и функции, написанные на ассемблере. Разработчики языка учли эти проблемы и дали программисту необходимые средства их решения.