Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi.pdf
Скачиваний:
191
Добавлен:
24.02.2016
Размер:
6.84 Mб
Скачать

begin

// Выделить память для 100 элементов

SetLength(A, 100);

A[0] := 5;

// A и B указывают на одну и ту же область памяти!

B := A;

B[1] := 7;

// Теперь A[1] тоже равно 7!

B[0] := 3;

// Теперь A[0] равно 3, а не 5!

end.

 

В приведенном примере, в переменную B заносится адрес динамической области памяти, в которой хранятся элементы массива A (другими словами, ссылочной переменной B присваивается значение ссылочной переменной

A).

Как и в случае со строками, память освобождается, когда количество ссылок становится равным нулю.

var

A, B: array of Integer;

begin

 

 

 

Выделить память для 100 элементов

SetLength(A, 100); //

A[0]

:=

10;

//

B указывает на те же элементы, что и A

B :=

A;

 

A :=

nil;

//

Память еще не освобождается, поскольку на нее

указывает

B

//

Продолжаем работать с B, B[0] = 10, а B[1] = 5

B[1]

:=

5;

B :=

nil;

//

Теперь ссылок на блок памяти нет. Память

освобождается

end;

Для работы с динамическими массивами вы можете использовать знакомую по строкам функцию Copy. Она возвращает часть массива в виде нового динамического массива.

Не смотря на сильное сходство динамических массивов со строками, у них имеется одно существенное отличие: отсутствие механизма копирования при записи (copy-on-write).

2.18. Нуль-терминированные строки

Кроме стандартных строк ShortString и AnsiString, в языке Delphi поддерживаются нуль-терминированные строки языка C, используемые процедурами и функциями Windows. Нуль-терминированная строка

представляет собой индексированный от нуля массив ASCII-символов, заканчивающийся нулевым символом #0. Для поддержки нультерминированных строк в языке Delphi введены три указательных типа данных:

146

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 := S1;

переменная S3 получит адрес уже существующей строки 'Object Pascal'.

Для удобной работы с нуль-терминированными строками в языке Delphi предусмотрена директива $EXTENDEDSYNTAX. Если она включена (ON), то появляются следующие дополнительные возможности:

массив символов, в котором нижний индекс равен 0, совместим с типом

PChar;

строковые константы совместимы с типом PChar.

указатели типа PChar могут участвовать в операциях сложения и вычитания с целыми числами; допустимо также вычитание (но не сложение!) указателей.

Врежиме расширенного синтаксиса допустимы, например, следующие операторы:

S3 := S2;

// S3 указывает на строку 'Delphi/Kylix'

147

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]