17:38

Тотальная неудачница и убийца жёстких дисков.
#post-id: 3506-22-50
#original-date: 2.03.2010 Tue
#original-time: 10:50 PM
#original-day:  3506
#original-host: WinXP Home SP3 (Build 2600)

Попросили отладить контрольную работу. Блин, вот динамический массив мне было слабо заюзать ^^ Я даже не помню как это делать...

Оказалось, есть функция SetLength(). А вот как обяъвляется динамический массив я запуталась. Вроде в универе (старом) говорили, что нужно через type дулать, а в хелпе к Дельфи написано про A : array of Type... Может быть то было ограничение Турбо Паскаля? А дельфийцы глянули на VB и решили сделать также ^^

Если кто не в курсе, в VB это делается так:



Preserve сохраняется все значения на месте, если в массиве что-то было.

Кстати, в VB массивые - это обёртка над SAFEARRAY. Полагаю, что разделение на статические и динамические массивы сделано из соображений совместимости, ну и для контроля, ведь по сути все SAFEARRAY динамические, и их в любом случае нужно инициализировать, указывать размер и так далее...

#music: Scooter\Back To Heavyweight Jam\Main Floor

Комментарии
03.03.2010 в 12:09

 
роде в универе (старом) говорили, что нужно через type дулать, а в хелпе к Дельфи написано про A : array of Type...

вот это просто будет работать:
var blabla: array of integer;
...
setlength(blabla, 50);
fillchar(blabla[0], sizeof(blabla[0]) * length(blabla), 0);

но если ты хочешь сравнивать/присваивать несколько переменных/передавать как аргумент, то при объявлении
var blabla1, blabla2: array of integer;
компилятор сочтет, что у переменных разный тип.
и, например, вот такой фокус не пройдет:
procedure fill_values(a: array of integer);
...
fill_values(blabla1);

и решается это примерно так:
type TIntegerArray = array of integer;
var blabla1, blabla2: TIntegerArray;
procedure fill_values(a: TIntegerArray);
03.03.2010 в 18:30

Тотальная неудачница и убийца жёстких дисков.
Как всё сложно. В VB массивые в аргументах выглядят как динамические. Например:

Dim A(0 to 12) As Long
Test A

Sub Test(ByRef A() As Long)
...

Но в общем логика дельфей понятна ^^
04.03.2010 в 19:26

 
В VB массивые в аргументах выглядят как динамические
Ага. VB снова всех шлет на три буквы - "OLE" :D
05.03.2010 в 02:12

Тотальная неудачница и убийца жёстких дисков.
Я и не отрицала, что там SAFEARRAY ^^' Но обёртка там более чем изящная ^^'