Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.036 c
14-1130486099
Igorek
2005-10-28 11:54
2005.11.20
Мой любимец распускает пятый листочек


9-1120384424
tERRORist
2005-07-03 13:53
2005.11.20
Проблемы с прозрачными объектами в GLScene


14-1130356302
БарЛог
2005-10-26 23:51
2005.11.20
Что лучше?


14-1130357222
LordOfRock
2005-10-27 00:07
2005.11.20
Muse


14-1130348890
Knight
2005-10-26 21:48
2005.11.20
Если кто-то будет в IRC-е... забегайте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский