Руководство по языку B.Pascal 7

       

Символьные указатели и строковые литералы


При разрешении расширенного синтаксиса строковый литерал совместим по присваиванию с типом 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.

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 символов.



Содержание раздела