![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать N-мерный массив в рантайме. [D7, WinXP]
Still Swamp © (2005-11-11 17:35:00)Как создать N-мерный массив в рантайме?
Still Swamp (2005-11-13 14:18:00) [1]Я возможно излишене лаконично выразилс чем вызвал даже перенос темы в раздел начинающий.
Как изменить размер N мерного массива в рантайме.
Допустим я декларирую следующее:
PMyArra = ^TMyArray;
TMyArray: array [0..0,0..0] of integer;
MyArray:PMyArray;
GetMem(MyArray, Width*Height*SizeOf(Integer));
Вроде есть структура двухерная, отведена под нее память. Как обратиться к члену MyArra(i,j)?
TUser (2005-11-11 20:17:00) [2]Если говорить о неизвестности размерности(а не размера) массива - то не надо вводить в заблюждение. Создать массив, если заранее не известно 2-х или 10-ти он мерный - низя. Надо создавать одномерный массив и писать код, который рассчитывает адрес в этом массиве.
AlexWlad (2005-11-11 19:56:00) [3]
> Still Swamp (11.11.05 17:35)
>
> Как создать N-мерный массив в рантайме?
Через TList - хоть до посинения... причем тип элементов массивов любой.
begin...end (2005-11-11 18:14:00) [4]> Leonid Troyanovsky © (11.11.05 18:08) [9]
Не знаю, принципиально это или нет. Можно, конечно, сделать указатель, выделять память и вручную вычислять смещения. Тогда и размер, и размерность можно будет задавать в run-time. И называть это массивом.
Но я подумал про массивы с точки зрения языка. Почему-то.
:-(
Leonid Troyanovsky (2005-11-11 18:08:00) [5]
> begin...end © (11.11.05 17:56) [6]
> > Amoeba © (11.11.05 17:54) [5]
> Под этим следует понимать, что размер и размерность -- не
> одно и то же.
Ну, это не так принципиально, бо, по-сути, компьютерные
массивы одномерны.
Или, если буквально отвечать на вопрос, то это VarArrayCreate.
--
Regards, LVT.
Amoeba (2005-11-11 17:59:00) [6]
> begin...end © (11.11.05 17:56) [6]
Sorry, просто невнимательно прочел ("обчитался" так сказать). Естественно, разницу между этими вещами знаю прекрасно.
vrem (2005-11-11 17:58:00) [7]Пусть динамический массив, но задаётся же -
a: array of array of array of integer; например,
количество "of array" нужно в дезигнтайме задавать,
компилятор ещё ругается если setlength не достаточное количество раз сделаешь...
begin...end (2005-11-11 17:56:00) [8]> Amoeba © (11.11.05 17:54) [5]
Под этим следует понимать, что размер и размерность -- не одно и то же.
Amoeba (2005-11-11 17:54:00) [9]
> begin...end © (11.11.05 17:46) [3]
Что следует понимать под
> Размерность массива (статического или динамического ) должна
> быть указана заранее.
Со статическими то и ежу ясно, а причем здесь динамические? С каких это пор в коде размер дин.массива нельзя задать переменной, значение которой будет определено в в ходе выполнения программы?
Leonid Troyanovsky (2005-11-11 17:52:00) [10]
> begin...end © (11.11.05 17:46) [3]
> Размерность массива (статического или динамического) должна
> быть указана заранее.
Пусть размерность массива будет M x M..
Нет, пожалуй, M - это многовато.
Итак, пусть размерность массива будет N x N..
--
Regards, LVT.
begin...end (2005-11-11 17:46:00) [11]Размерность массива (статического или динамического) должна быть указана заранее.
Amoeba (2005-11-11 17:40:00) [12]Сделать это можно только если массив динамический.
mike-d (2005-11-11 17:40:00) [13]F1 - multidimensional dynamic arrays