*räusper*
Hätte eigentlich nicht gedacht, dass dies funktioniert
Delphi-Quellcode:
type
rec = record
irgendwas: CHAR;
liste: array of integer;
end;
const
L1: array[0..4] of integer=(2, //erster Eintrag ist Referenzzähler
3, //zweiter Eintrag für die Länge des eigentlichen Arrays
3, 5, 90); //und hier der Inhalt des eigentlichen Arrays
L2: array[0..6] of integer=(2, 5, 1, 2, 3, 5, 0); //same as L1
A: array[0..1] of rec = (
(irgendwas: 'a'; liste: @L1[2]), //Zeiger auf den ersten eigetlichen Wert des Arrays
(irgendwas: 't'; liste: @L2[2])
);
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:Integer;
begin
for i:=low(a) to high(a) do
begin
memo1.lines.add(a[i].irgendwas);
for j:=low(a[i].liste) to high(a[i].liste) do
memo1.lines.add(inttostr(a[i].liste[j]));
end;
end;
Edit: Fast vermutet und hat sich beim Test bestätigt --> einen referenzzähler brauchen unsere Arrays auch. -1, wie bei constanten Strings funktioniert leider nicht, also nehme ich mal +1.
Edit2: Die Frage ist noch, wie man das simuliert, wenn man mal kein Integer-Array hat?
Edit3: Und wer es mal für andere Arrays sucht...hier mal am Beispiel Strings.
Problem ist dabei noch der Referenzzähler. Bei 1 gibt es am Ende des Projektes einen Runtime-Error. Naja...ob man das produktiv einsetzen sollte?
Delphi-Quellcode:
type
rec = record
irgendwas: CHAR;
liste: array of string;
end;
THeader=record
ref:Integer;
length:Integer;
end;
TL1 =record
Header:THeader;
Content:array[0..2] of string;
end;
TL2 =record
Header:THeader;
Content:array[0..4] of string;
end;
const
L1: TL1=(Header:(ref: 2; length: 3);
Content: ('A','B','C'));
L2: TL2=(Header:(ref: 2; length: 5);
Content: ('A','B','C','D','X'));
A: array[0..1] of rec = (
(irgendwas: 'a'; liste: @L1.Content),
(irgendwas: 't'; liste: @L2.Content)
);
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:Integer;
test:rec;
begin
for i:=low(a) to high(a) do
begin
memo1.lines.add(a[i].irgendwas);
for j:=low(a[i].liste) to high(a[i].liste) do
memo1.lines.add(a[i].liste[j]);
end;
memo1.lines.add('---');
Test:=a[0];
for i:=low(a) to high(a) do
begin
memo1.lines.add(a[i].irgendwas);
for j:=low(a[i].liste) to high(a[i].liste) do
memo1.lines.add(a[i].liste[j]);
end;
memo1.lines.add('---');
memo1.lines.add(test.irgendwas);
for j:=low(test.liste) to high(test.liste) do
memo1.lines.add(test.liste[j]);
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.