~

Доступ к переменной заданного типа по ссылке.

Синтаксис:

~<тип данных>(<имя переменной>);
~(< имя переменной >)

Описание:

Доступ к переменной заданного типа по ссылке. Используются типизированные конструкции для доступа к данным разного типа:

a = ~integer(i) - возвращает данные целого по ссылке;

a = ~double(i) - вещественного;

a = ~complex(i) - комплексного;

a = ~intarray(i) - целочисленный массив;

a = ~array(i) - действительный массив;

a = ~matrix(i) - действительная матрица;

a = ~boolean(i) - двоичное;

a = ~string(i) - стока;

a = ~point(i) - двумерная геометрическая точка;

a = ~color(i) - цвет;

a = ~carray(i) - комплексный вектор;

a = ~cmatrix(i) - комплексная матрица;

Пример 1:

var i=10,
arr:array;
ptr = @i; //получение ссылки
ptr1 = @arr;
d = ~double(ptr); //доступ по ссылке
w = ~array(ptr1);
~double(ptr) = 1000;

В процессе выполнения примера создается ссылка ptr на переменную i и ссылка ptr1 на массив arr. При помощи функции ~ происходит доступ по ссылке к переменным i и arr. Переменной i по ссылке ptr присваивается значение 1000.

Пример 2:

var a: double;
a = 10;
aptr = @a; // Получение ссылки на переменную 
var b: double;
//Получение значения переменной по ссылке с использованием нетипизированного указателя
b = ~(aptr);
b = b + 1;
//Присвоение по ссылке с использованием нетипизированного доступа к указателю
~(aptr) = b + 1;

В процессе выполнения примера создается ссылка aptr на переменную a и затем получение ее значения а также присваивание ей нового значения с использованием нетипизированного указателя.

Пример 3:

initialization

//В этом массиве мы будем хранить указатели на матрицы
//он должен быть комплексного типа
var ptrs_array: carray;

//Создание
ptrs_array = 100#0; 
for(i=1,100) begin
//Вот так мы выделяем память
ptrs_array[i]=new~matrix;
//Присваиваем значение матрицы
~matrix(ptrs_array[i])=[[1,2],[3,1]];
end;

//Чтение - тут мы суммируем детерминанты матриц
summ = 0;
for(i=1,100) begin
dd = det(~matrix(ptrs_array[i]));
summ = summ + dd;
end;

//Уничтожение объектов после того, как мы закончили их использование
for(i=1,100) begin
dispose(ptrs_array[i]);
end;

end;

Пример показывает использование массива указателей на 100 матриц и последующее обращение к каждой из них.

Сопутствующие материалы