При разрешении расширенного синтаксиса строковый литерал
совместим по присваиванию с типом PChar. Это означает, что пере-
менной типа PChar можно присвоить строковый литерал. Например:
var
P: PChar;
.
.
begin
P := 'Привет...';
end;
В результате такого присваивания указатель указывает на об-
ласть памяти, содержащую строку с завершающим нулем, являющуюся
копией строкового литерала. Компилятор записывает строковые лите-
ралы в сегмент данных, аналогично описанию "скрытых" типизирован-
ных констант:
const
TempString: array[0..14] of Char = 'Привет...'#0;
var
P: PChar;
.
.
begin
P := @TempString;
end;
Когда соответствующие формальные параметры имеют тип Char,
строковые литералы вы можете использовать как фактические пара-
метры при вызовах процедур и функций. Например, если имеется про-
цедура с описанием:
procedure PrintStr(Str: PChar);
то допустимы следующие вызовы процедуры:
procedure PrintStr('Строка для проверки');
PrintStr(#10#13);
Аналогично тому, как это происходит при присваивании, компи-
лятор генерирует строку с завершающим нулем, представляющую собой
копию литеральной строки в сегменте данных, и передает указатель
на эту область памяти в параметре Str процедуры PrintStr.
Наконец, типизированная константа типа PChar может инициали-
зироваться строковой константой. Это справедливо также для струк-
турных типов, таких как массивы PChar и записи, а также объекты
PChar.
B.Pascal 7 & Objects/LR - 302 -
const
Message: PChar = 'Program terminated';
Prompt: PChar = 'Enter values: ';
Digits; array [0..9] of PChar = {
'Zero', 'One', 'Two', 'Three', 'Four', 'Five',
'Six', 'Seven', Eight', 'Nine'};
Строковая выражение-константа всегда вычисляется как строка
Паскаля, даже если она инициализируется как типизированная конс-
танта типа PChar. Таким образом, строковое выражение-константа
всегда ограничено длиной в 255 символов.