Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
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 и выделить), тогда не понадобятся трюки с копированием из старой области памяти в новую, это весьма положительно скажется на быстродействии…
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)