Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
2-1130767781
stud
2005-10-31 17:09
2005.11.20
получить код ошибки


3-1128778466
alpine
2005-10-08 17:34
2005.11.20
Через что лучше установить соединение с MySQL ?


2-1129298643
Zaletchik
2005-10-14 18:04
2005.11.20
Помогите с бинарными файлами.


4-1126897036
Dot
2005-09-16 22:57
2005.11.20
слушать порт WinSocks


1-1130423595
_pioner_
2005-10-27 18:33
2005.11.20
Собственные шрифты в проге