Тотальная неудачница и убийца жёстких дисков.
#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
#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
вот это просто будет работать:
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);
Dim A(0 to 12) As Long
Test A
Sub Test(ByRef A() As Long)
...
Но в общем логика дельфей понятна ^^
Ага. VB снова всех шлет на три буквы - "OLE"