Пример 1. Типизированные константы и переменные типа – длинная строка. Выделение памяти и задание значений. Обращение к элементам строк

PROCEDURE …;

VAR

S: STRING[10];

BEGIN

S:= ’ABCDEF’; // S = ’ABCDEF’

S:= ’0123456789ABCD’ // S = ’0123456789’

END;

Типизированные константы и переменные типа – длинная строка. Выделение памяти и задание значений. Обращение к элементам строк.

Типизированные константы и переменные типа – длинная строка являются объектами, подобными динамическим массивам. При этом первый элемент строки имеет порядковый номер 1 (так же, как и для переменных и типизированных констант типа – короткая строка).

Обращение к значениям составляющих типизированных констант и переменных типа – длинная строка реализуется так же, как и обращение к значениям элементов одномерного массива.

С каждой типизированной константой и переменной типа – длинная строка в оперативной памяти связывается участок объёмом 4 байта, предназначенный для хранения адреса области памяти, в которой должно располагаться значение типизированной константы или переменной. Каждый элемент строки в данной области памяти занимает один байт.

Для типизированной константы типа – длинная строка начальное значение задаётся в описании этой константы. Начальным значением переменной типа – длинная строка по умолчанию является пустая строка. Память для пустой строки не выделяется.

Выделение памяти (или изменение её объёма), предназначенной для хранения значения типизированной константы или переменной типа – длинная строка, может быть реализовано с помощью процедуры SETLENGTH, а также с помощью оператора присваивания.

Заголовок процедуры SETLENGTH, в частности, может быть следующим

PROCEDURE SETLENGTH (VAR S; L: INTEGER);

где S – это либо переменная-массив, либо обрабатываемая строка, а L – это соответственно либо количество элементов массива, либо устанавливаемая длина строки S.

Рассмотрим ряд примеров.

Пример 1.

PROCEDURE …;

VAR

S: STRING;

BEGIN

MEMO1. LINES. ADD (S[0]) // Ошибка на этапе компиляции

// (недопустимо обращение S[0],

// поскольку S – переменная

// типа – длинная строка).

END;

Пример 2.

PROCEDURE …;

VAR

S: STRING;

BEGIN

MEMO1. LINES. ADD (S[1]) // Ошибка на этапе выполнения

// (не выделена память для значения S).

END;

Пример 3.

PROCEDURE …;

VAR

S: STRING;

C: CHAR;

BEGIN

C:= S[1] // Ошибка на этапе выполнения

// (не выделена память для значения S).

END;

Пример 4.

PROCEDURE …;

VAR

S: STRING;

BEGIN

S[1]:= ’A’ // Ошибка на этапе выполнения

// (не выделена память для значения S).

END;

Пример 5.

PROCEDURE …;

VAR

S: STRING;

BEGIN

SETLENGTH (S, 0);

MEMO1. LINES. ADD (S[1]) // Ошибка на этапе выполнения

// (не выделена память для значения S).

END;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: