AlphaBlend
Не обращайте внимания, ему нужно действительно использовать что, то типа TList. Возможно мы не понимаем сути его задачи. На моей практике это часто бывает. Пусть сам разбирается.
Модератор: Модераторы
AlphaBlend писал(а):Вам не только на блюдечке все п одали выше , но еще и салфеточку повязали и даже разжевали
CRobin писал(а):скалогрыз не уверен, но есть ощущение, что такое все же можно сделать через динамические константы и указатели. В случае с объектом я не могу передать указатель на конкретное поле записи, насколько я понимаю, по типу такого
type
TEntryArray = class(TObject)
...
function GetElementPtr(i: integer): PEntry;
end;
function TEntryArray.GetElementPtr(i: integer): PEntry;
begin
//todo: sanity check, return nil, if i is invalid
Result:=@data[i-flow];
end;
e := @data.GetElementPtr(i)^.field;
CRobin писал(а):Но в случае, если массив объявлен статически с использованием перечисления или через указание интервал [A..B], тогда так не получается. Это означает, что где то в памяти находится значение "отступа", которое равно А.
procedure Test;
var
a: array [2..4] of integer;
begin
a[2]:=5;
a[3]:=6;
writeln(a[3]);
end;
begin
Test;
end.
procedure Test;
var
a: array [2..4] of integer;
begin
a[2]:=5;
a[3]:=6;
writeln(a[3]);
end;
procedure Test2;
var
a: array [0..2] of integer;
begin
a[0]:=5;
a[1]:=6;
writeln(a[1]);
end;
begin
Test;
Test2;
end.
скалогрыз писал(а):Во время компиляции, компилятор знает об отступе "A", и все обращения к статическому массиву преобразуются с учётом этого отступа.
type TMyArray(a,b:integer) = array [a..b] of elem;
var PMyArray = TMyArray(222,333);
CRobin писал(а):Компилятор не знает что именно я введу, а это значит ему нужно будет отнять отступ А для того чтоб получить нужный элимент, иначе никак. Это значит, что где то в памяти все же этот отступ хранится
{$mode delphi}
uses Classes, SysUtils;
var
a: array [10..20] of integer;
s: string;
i: integer;
k: integer;
begin
for i:=low(a) to high(a) do
a[i]:=i;
readln(s);
while s<>'' do begin
i:=StrToIntDef(s,-1);
if (i>=low(a)) and (i<=high(a)) then begin
k:=a[i];
writeln(k);
end;
readln(s);
end;
end.
; [16] k:=a[i];
mov eax,dword ptr [U_P$PROGRAM_I]
mov eax,dword ptr [U_P$PROGRAM_A+eax*4-40]
mov dword ptr [U_P$PROGRAM_K],eax
CRobin писал(а):раньше Паскаль поддерживал такой синтаксис
скалогрыз писал(а):а раньше это когда?
CRobin писал(а):последний раз на нем писал когда у меня был 486dx
- Код: Выделить всё
const a = 22222222222222;
b = 22222222222333;
var dic : array[a..b] of TEntry;
Сейчас этот форум просматривают: Google [Bot] и гости: 232