![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
array [0..0] of ... [D7]
Прима © (2009-09-18 12:49:00)
type
TElem = packed record
S1:Byte;
S2:Byte;
D1:DWord;
end;
TMArr = array [0..0] of TElem;
TFuck = record
B:Byte;
Q:TMArr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Q:TFuck;
I:Integer;
begin
Q.B:=1;
Q.Q[0].S1:=1;
Q.Q[0].S2:=1;
Q.Q[0].D1:=1;
Q.Q[1].S1:=2; <=Constant expression violates subrange bounds
Q.Q[1].S2:=2;
Q.Q[1].D1:=2;
//
for I:=0 to Length(Q.Q)-1 do
begin
Memo1.Lines.Add(Format('%d %d',[Q.Q[I].S1, Q.Q[I].S2]));
end;
end;
В чем я не прав ? Необходимо заранее указывать размер массива?
Тогда как ?
Спасибо !
Anatoly Podgoretsky (2009-09-18 13:30:00) [21]Можно
> TMArr = array [1..11] of TElem;
Вот тут выделена память по 11 элементов типа TElem
Прима (2009-09-18 13:26:00) [22]2 Anatoly Podgoretsky © (18.09.09 13:24) [5]
> Для статических массивов память тоже выделяется статически,
> через указание размерности в типа.
Пардон, но я не понял. Можно ли кодом ?
Anatoly Podgoretsky (2009-09-18 13:24:00) [23]
> Прима (18.09.09 13:18) [4]
Для статических массивов память тоже выделяется статически, через указание размерности в типа.
Прима (2009-09-18 13:18:00) [24]2 Юрий Зотов © (18.09.09 13:01) [3]
Спасибо
.
> либо указатель на статический массив (сначала выделив под
> него память, конечно).
Хочу разобраться для себя. Можно подробнее и кодом ?
GetMem(Q.Q,SizeOf(TElem)*2);
Ибо даже выделить память пока не получается
Юрий Зотов (2009-09-18 13:01:00) [25]> Прима (18.09.09 12:49)
> Необходимо заранее указывать размер массива?
Размер статического массива указывается при его объявлении и не может быть изменен. Вы объявили статисеский массив, который содержит один элемент с индексом 0, поэтому Q.Q[1] дает ошибку.
> Тогда как ?
Используйте либо динамический массив (см. в справке Dynamic arrays), либо указатель на статический массив (сначала выделив под него память, конечно). Первый способ, похоже, будет проще.
Прима (2009-09-18 12:56:00) [26]Пардон. Разобрался.
Вот решение :TMArr = array of TElem;
Прима (2009-09-18 12:54:00) [27]
Q.B:=1;
SetLength(Q.Q,2); <=Incompatible types
Q.Q[0].S1:=1;