Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Внизarray Найти похожие ветки [0..0]
← →
злобная танька (2005-11-03 21:56) [0]собсно что это такое и зачем оно нужно?
оч. интересно.
← →
begin...end © (2005-11-03 21:56) [1]В каком контексте?
← →
NightLord © (2005-11-03 21:59) [2]Массив с одним елементом =)
← →
NightLord © (2005-11-03 22:00) [3]Упс "элементом"
← →
злобная танька (2005-11-03 22:04) [4]ну.. встречалось где-то я даже не помню..
вот сегодня вспомнила не могу понять зачем это может понадобится
← →
злобная танька (2005-11-03 22:08) [5]ну вот хотя бы модуль windows если открыть.. в 1404 строке пишут:
Privilege: array[0..0] of TLUIDAndAttributes;
← →
NightLord © (2005-11-03 22:12) [6]Обычно динамические массивы так определяют -)
← →
begin...end © (2005-11-03 22:16) [7]> злобная танька (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 похожим образом имитировали динамические массивы.
← →
злобная танька (2005-11-03 22:44) [8]а... понятно. спасибо!
я раньше делала вот так:
TempRec := TRecord(Pointer(DWORD(@buff) + i*SizeOf(TRecord))^);
а теперь конечно по умному буду :)
и как я срразу не догнала шо к чему.
← →
злобная танька (2005-11-03 23:42) [9]гм вопрос появился...
объявлены типы:
_1D = array[0..0] of TInteger;
_2D = array[0..0] of _1D;
так работает:
_1D(Data^)[i + j*linesize] := 0;
а так нет:
_2D(Data^)[i, j] := 0;
то есть работает но как то стремно. пишет нули только немножко в начале а что после остается как было.
что не так?
← →
Sam Stone © (2005-11-03 23:48) [10]В данном случае двумерный массив представляется как несколько одномерных подряд.
← →
злобная танька (2005-11-03 23:50) [11]
> Sam Stone © (03.11.05 23:48) [10]
в смысле они наляпываются друг на друга?
← →
Sam Stone © (2005-11-04 10:17) [12]В смысле они идут друг за другом. Посмотри массивы в Си, они там вроде так организованы(могу соврать ;)).
← →
sniknik © (2005-11-04 12:21) [13]в дельфях гораздо проще (и не надо в си лезть. плохому научат ; ) пользоваться динамическими массивами
т.е. это
злобная танька (03.11.05 23:42) [9]
сделать так
Data: array of array of integer;
SetLength(Data, i+1, j+1);
Data[i, j]:= 1; //присваиваеи последнему элементу массива
и работать проще и все будет "не стремно". (не запутаешся в указателях, дельфя сама позаботится)
← →
Sapersky (2005-11-04 12:50) [14]Реализация свой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].
← →
Sapersky (2005-11-04 12:52) [15]в дельфях гораздо проще (и не надо в си лезть. плохому научат ; ) пользоваться динамическими массивами
Так. Но, увы, из-за сильно запутанной адресации многомерных динамических - медленнее.
Опять же, нельзя "навесить" дин. массив на произвольный поинтер...
← →
злобная танька (2005-11-05 10:43) [16]спасибо всем, очень интересно.
а можно ли вообще "навесить" двумерный массив в каком-либо виде на произвольный pointer?
← →
GuAV © (2005-11-05 11:02) [17]
> а можно ли вообще "навесить" двумерный массив в
> каком-либо виде на произвольный pointer?
Если типа как [7], то внутренние границы должны быть известны.
Если с неизвестными границами, то только как одномерный, приводя внешний индекс умножением.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c