![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]В каком контексте?