Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо