fliegermichl hat geschrieben: Do 17. Sep 2026, 13:44
Ja, schon etwas merkwürdig,
da A ja kein Pointertyp ist.
Behauptet wer?
Code: Alles auswählen
program Project1;
{$mode ObjFPC}{$H+}
Var
a:Array[0..1] Of Integer;
p:PInteger;
pp:^PInteger;
begin
a[0]:=42;
a[1]:=123;
Writeln('Adresse a: ',PtrInt(@a));
Writeln('Adresse a[0]:',PtrInt(@a[0]));
Writeln('Adresse a[1]:',PtrInt(@a[1]));
p:=a; //<----!!!! Kein @-Operator
Write('Adresse p: ',PtrInt(p));
Writeln(' - Wert p:', p^);
Inc(p);
Write('Adresse p: ',PtrInt(p));
Writeln(' - Wert p:', p^);
Writeln('------------- die andere Richtung ----------');
pp:=GetMem(2*SizeOf(Integer));
p:=pp^;
p^:=38;
Write('Adresse p: ',PtrInt(p));
Writeln(' - Wert p:', p^);
Inc(p);
p^:=234;
Write('Adresse p: ',PtrInt(p));
Writeln(' - Wert p:', p^);
a:=pp^; //<----!!!! Kein @-Operator
Writeln('Adresse a: ',PtrInt(@a));
Write('Adresse a[0]:',PtrInt(@a[0]));writeln(' - Wert a[0]:',a[0]);
Write('Adresse a[1]:',PtrInt(@a[1]));writeln(' - Wert a[1]:',a[1]);
FreeMem(pp);
Readln;
end.
Ergibt bei mir
Code: Alles auswählen
Adresse a: 4295041040
Adresse a[0]:4295041040
Adresse a[1]:4295041044
Adresse p: 4295041040 - Wert p:42
Adresse p: 4295041044 - Wert p:123
------------- die andere Richtung ----------
Adresse p: 22441800 - Wert p:38
Adresse p: 22441804 - Wert p:234
Adresse a: 4295041040
Adresse a[0]:4295041040 - Wert a[0]:38
Adresse a[1]:4295041044 - Wert a[1]:234
Bedeutet: Die Array-Variable SELBST ist zuweisungskompatibel zum passenden Zeiger-Typ
In die andere Richtung aber auch klar erkennbar, dass die Adressen nicht mehr übereinstimmen, weil ich explizit neuen Speicher angefordert habe
Unabhängig davon: Ja, stimme zu: GetMem/FreeMem hat bei statischen Arrays nix verloren und sollte meckern