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

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

array[0..0] [D7, WinXP]


злобная танька ©   (2005-11-03 21:56:00) 

собсно что это такое и зачем оно нужно?
оч. интересно.


GuAV   (2005-11-05 11:02:00) [1]


> а можно ли вообще "навесить" двумерный массив в
> каком-либо виде на произвольный pointer?

Если типа как [7], то внутренние границы должны быть известны.
Если с неизвестными границами, то только как одномерный, приводя внешний индекс умножением.


злобная танька   (2005-11-05 10:43:00) [2]

спасибо всем, очень интересно.
а можно ли вообще "навесить" двумерный массив в каком-либо виде на произвольный pointer?


Sapersky   (2005-11-04 12:52:00) [3]

в дельфях гораздо проще (и не надо в си лезть. плохому научат ; ) пользоваться динамическими массивами

Так. Но, увы, из-за сильно запутанной адресации многомерных динамических - медленнее.
Опять же, нельзя "навесить" дин. массив на произвольный поинтер...


Sapersky   (2005-11-04 12:50:00) [4]

Реализация свойcтва Pixels в FastLib (куда более быстрого, чем печально известное свойство TBitmap):

 PFColor =^TFColor;
 TFColor = packed record
   b,g,r: Byte;
 end;

 PLine24   =^TLine24;
 TLine24   = array[Word]of TFColor;  
 // [Word] суть [0..65535]. В данном случае то же самое, что и [0..0],
 // т.к. маловероятен размер больший размер картинки

 PPixels24 =^TPixels24;
 TPixels24 = array[Word]of PLine24; // т.е. здесь массив указателей

Var
 Pixels24 : PPixels24;
 // зачем тайпкастить каждый раз?
 // Можно использовать переменную данного типа

И - внимание! - индексы пишутся наоборот: Pixels24[y,x].


sniknik   (2005-11-04 12:21:00) [5]

в дельфях гораздо проще (и не надо в си лезть. плохому научат ; ) пользоваться динамическими массивами
т.е. это
злобная танька   (03.11.05 23:42) [9]
сделать так

Data: array of array of integer;

SetLength(Data, i+1, j+1);
Data[i, j]:= 1; //присваиваеи последнему элементу массива

и работать проще и все будет "не стремно". (не запутаешся в указателях, дельфя сама позаботится)


Sam Stone   (2005-11-04 10:17:00) [6]

В смысле они идут друг за другом. Посмотри массивы в Си, они там вроде так организованы(могу соврать ;)).


злобная танька   (2005-11-03 23:50:00) [7]


> Sam Stone ©   (03.11.05 23:48) [10]

в смысле они наляпываются друг на друга?


Sam Stone   (2005-11-03 23:48:00) [8]

В данном случае двумерный массив представляется как несколько одномерных подряд.


злобная танька   (2005-11-03 23:42:00) [9]

гм вопрос появился...
объявлены типы:
 _1D = array[0..0] of TInteger;
 _2D = array[0..0] of _1D;

так работает:
 _1D(Data^)[i + j*linesize] := 0;

а так нет:
 _2D(Data^)[i, j] := 0;

то есть работает но как то стремно. пишет нули только немножко в начале а что после остается как было.
что не так?


злобная танька   (2005-11-03 22:44:00) [10]

а... понятно. спасибо!
я раньше делала вот так:
TempRec := TRecord(Pointer(DWORD(@buff) + i*SizeOf(TRecord))^);
а теперь конечно по умному буду :)
и как я срразу не догнала шо к чему.


begin...end   (2005-11-03 22:16:00) [11]

> злобная танька   (03.11.05 22:04) [4]

Ну, например, это иногда используется для работы с некоторой областью памяти, на которую имеется указатель, как с массивом данных нужного типа.

type
 PMyArray = ^TMyArray;
 TMyArray = array [0..0] of TMyType;
var
 P: Pointer;
begin
 PMyArray(P)[индекс] := ...
 ...
end

Только Range Checking должен быть отключён (если индекс <> 0).

А в Турбо Паскале и ранних версиях Delphi похожим образом имитировали динамические массивы.


NightLord   (2005-11-03 22:12:00) [12]

Обычно динамические массивы так определяют -)


злобная танька   (2005-11-03 22:08:00) [13]

ну вот хотя бы модуль windows если открыть.. в 1404 строке пишут:
Privilege: array[0..0] of TLUIDAndAttributes;


злобная танька   (2005-11-03 22:04:00) [14]

ну.. встречалось где-то я даже не помню..
вот сегодня вспомнила не могу понять зачем это может понадобится


NightLord   (2005-11-03 22:00:00) [15]

Упс "элементом"


NightLord   (2005-11-03 21:59:00) [16]

Массив с одним елементом =)


begin...end   (2005-11-03 21:56:00) [17]

В каком контексте?


Наверх

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