Quote (fnc12)
Edelon, я не понял практическую значимость твоего метода.
в частности пример из борланда: всем известно что в борланде функция не может вернуть тип запись. К примеру координаты X Y (integer 16bit) одной переменной. Но если их вложить в longint (32bit) и обратится как к записи:
Code
type coord = record
x,y :integer;
end;
var
arr :array[0..10] of coord;
cnt :integer;
function some_act(somein:integer):longint;
var temp:coord;
begin
temt.x:=somein+10;
temt.y:=trunc(somein/10);
some_act:=longint(temp);{ возвращаем ответ в "нужном" типе}
end;
BEGIN
for cnt:=0 to 10 do
longint(arr[cnt]):=some_act(cnt); {обращаемся к записи в выходном типе функции и наполняем массив}
for cnt:=0 to 10 do
putpixel(arr[cnt].x,arr[cnt].y,cnt); {отрисовываем}
END.
собственно идея в том что можно вернуть несколько параметров при выходе из одной функции (как известно прыжки в программе требуют не мало времени) без использования var в декларации. если 32 разряда не хватает можно объявить string[сколько надо] каким то типом и обращаться к нему. Главное чтоб в памяти типы были соразмерны (весили одинаково), иначе последствия непредсказуемы (затрешь соседнюю ячейку или не дописав оставишь шум).
Именно за счёт этого финта я смог в борланд паскале реализовать динамический массив: есть возможность зарезервировать память определённого объёма и получить указатель на её начало. но вот адресоваться к произвольному элементу, не получается. Тип pointer не допускает арифметических операций над собой, и весит 32 бита. а вот тип longint имеет арифметику и весит столько же. В общем обрабатываем указатель как лонгинт и получаем ссылку на произвольный элемент выделенной памяти.
или вот еще пример: ты добыл какую то библиотеку в которой есть нужная тебе функция. но вот незадача, она запрашивает типы отличные от тех что у тебя в программе... варианты есть: переписать программу и адаптировать типы под процедуру, написать функцию преобразующую типы, или отключать проверку типов при каждом вызове этой процедуры... лично мне проще пояснить что то что я скармливаю именно то что она хочет чем рихровать весь код чтоб угодить кому то...