Jo, standardmäßig geht es meistens so
Delphi-Quellcode:
function SwapArray(const Arr: TBytes): TBytes; // CONST kann hier nicht schaden, weil den Input willst ja eh nicht verändern.
oder
procedure SwapArray(var Arr: TBytes);
oder
procedure SwapArray(const InArr: TBytes; var OutArr: TBytes); // oder OUT statt VAR
Delphi-Quellcode:
procedure Test;
var ArrNum:array of Byte;
begin
...
i := PInteger(@ArrNum[0])^;
end;
Sowas geht garnicht.
Wenn Pointer, dann solltest/mußt DU den Speicher reservieren und dort den Inhalt des Arrays reinkopieren.
Denn nach der Prozedur ist die Variable und damit auch das Array nicht mehr vorhanden (die letzte und einzige Referenz endet mit dieser Variable und Delphi gibt den Speicher frei)
und der Pointer zeigt ins Nirvana, egal ob man sich einen Zeiger auf die Variable oder auf die Arraydaten besorgt hatte.
Alle anderen Tricks mit Pointer und Manipulation der Referenzzählung, sollte man tunlichst vermeiden. (vor allem wenn man keine Ahnung von den Interna hat und selbst dann ist sowas selten eine gute Idee)