Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Rückgabe Funktion = Dynamisches Array

  Alt 29. Nov 2010, 01:20
Es ist Unsinn die Länge von Result nicht setzen zu müssen. Das ist ein dynamisches Array. Und dessen Größe muss man setzen, um den Elementen Werte zu weisen zu können. Und es gibt auch keine Exception wenn man die Länge das Results setzt.

Und so funktioniert es:
Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TArr = array of Int64;
  TMyClass = class(TObject)
  private
  public
    function MyFunc(str: string): Tarr;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TMyClass.MyFunc(str: string): TArr;
var
  i: integer;
  AsciiArray: array of Int64;
begin
  SetLength(AsciiArray, Length(str));
  for i := 1 to Length(str) do
  begin
    AsciiArray[i - 1] := Ord(str[i]);
  end;
  SetLength(Result, High(AsciiArray) + 1);
  for i := Low(AsciiArray) to High(AsciiArray) do
    Result[i] := AsciiArray[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass: TMyClass;
  arr: TArr;
  i: Integer;
  s: string;
begin
  MyClass := TMyClass.Create;
  try
    arr := MyClass.MyFunc('test');
    for i := 0 to high(arr) do
      s := s + IntToStr(arr[i]) + ' | ';
    ShowMessage(s);
  finally
    MyClass.Free;
  end;
end;

end.
Außerdem muss die Schleife nur bis Länge der Zeichenkette minus eins laufen. Und ein AnsiString fängt bei eins an, deswegen muss die Schleife von ein mit Länge Zeichenkette laufen. bei der Array Zuweisung muss man natürlich vom Index dann eins abziehen, weil es null basierend ist.

Wenn man High benutzt, muss man noch eins dazu addieren, da High den Index des letzten Elementes zurück. Bei einer Array Länge von vier und wenn das Array null basierend ist, wie bei dynamischen Arrays, dann liefert High drei. Das Array hat aber vier Elemente von null bis drei.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (29. Nov 2010 um 01:38 Uhr)
  Mit Zitat antworten Zitat