Последние записи
- Как запустить программу указанную в Edit.Text
- Скачать файл с использованием потока
- Поиск слова в Memo
- Распаковщик формата .img из GTA San Andreas
- Подсчет количества повторяющихся букв в файле
- Простейший скрипт загрузки картинки с помощью php
- Рассылка. Выпуск 154
- Получение картинки с веб-камеры
- Скопировать определённый кусок image
- Сделать printscreen экрана и сохранить
22nd
Июн
Аналоги динамических массивов в TP и PascalABC?
Posted by Chas under Пост-обзор
полноценного открытого массива скажем type arr=array of integer;
Pascal не поддерживает.
Serge_Bliznykov:
может лучше посмотреть на использование динамических структур (связных списков) ?! Это может оказаться и надежнее, и красивее и эффективнее, чем манипуляции с указателями…
а вообще, мне удалось обмануть это Pascal.ABC таким образом:
type mA=array[1..1] of integer;
mAFictive=array[1..10000] of integer;
pAFict = ^mAFictive;
procedure ArrayAdd(var AAA : pAFict; var N : integer; val: integer);
var siz : word;
pAF, p4Free : pAFict;
i : integer;
begin
n:=n+1;
siz:=n*SizeOf(mA);
GetMem(pAF,siz); {выделяем новую область памяти}
// копируем туда старые данные
for i:=1 to n-1 do pAF^ := AAA^; // можно через CopyMem переписать...
p4Free := AAA; {сохраним указатель на ту память, чтобы была выделена ранее}
AAA := pAF; {теперь новая память доступна}
FreeMem(p4Free); {очистим предыдущий указатель}
AAA^[n]:=val;
end;
var
i, n : integer;
pAF : pAFict;
begin
WriteLn('Хакерские приемы в PASCAL.ABC');
n:=0;
ArrayAdd( pAF, n, 200 );
ArrayAdd( pAF, n, 300 );
ArrayAdd( pAF, n, 400 );
for i:=1 to N do
// Writeln(i, ' = ', pAFict(A)^);
Writeln(i, ' = ', pAF^);
FreeMem(pAF); // обязательно освободить память...
readln;
end.
Кстати, если выделить память ОДИН раз (сразу, сколько надо – задать нужное N и выделить), тогда не понадобятся трюки с копированием из старой области памяти в новую, это весьма положительно скажется на быстродействии…

