![]() |
Delphi-Version: 2010
Pointer of Array of Pointer
Hey Leute,
hab wiedermal ein Problem. Und zwar...zunächst sollte ich ein einfaches Programm schreiben, in dem Zahlen in ein Array eingelesen werden, dann sortiert und wieder ausgegeben. Hab dies mit Quicksort gemacht. War auch kein Thema. Um den Umgang mit Pointer zu üben, soll ich das jetzt so verändern, dass ein Pointer auf mein Array zeigt, und das Array wieder rum soll ein Array of Pointer sein. Also ich glaube das mit dem Array of Pointer habe ich hinbekommen:
Delphi-Quellcode:
dazu die interessanten Proceduren:
Type
TEintrag = Record Zahl: integer; End; PEintrag = ^TEintrag; Type TForm1 = Class(TForm) ListBox1: TListBox; EingabeZahl: TEdit; Beenden: TButton; BtSort: TButton; Hinzufuegen: TButton; Procedure HinzufuegenClick(Sender: TObject); Procedure BeendenClick(Sender: TObject); Procedure BtShowClick(Sender: TObject); Procedure BtSortClick(Sender: TObject); private Liste: Array Of PEintrag; Procedure Output(LängeListe: integer); Procedure Input; Procedure Quicksort(erstes, letztes: integer); Procedure WertTauschen(StelleA, StelleB: Integer); End;
Delphi-Quellcode:
Doch wie schaffe ich es jetzt ein Pointer auf das Array zeigen zu lassen?
Procedure TForm1.Input;
Var rec_p: PEintrag; x: integer; Begin rec_p := Nil; // Init mit nichts new(rec_p); { Init eines Speicherbereches der Größe TRec und rec_P <> Nil und zeigt auf eine Adresse } //neuen Eintrag in Array eintragen rec_p^.Zahl := StrToInt(EingabeZahl.Text); SetLength(Liste, length(Liste) + 1); x := high(Liste); Liste[x] := rec_p; End; Procedure TForm1.Output(LängeListe: integer); Var rec: TEintrag; rec_p: PEintrag; x: integer; Begin rec_p := Nil; // Init mit nichts //ListBox leeren ListBox1.clear; For x := 0 To LängeListe Do ListBox1.Items.Strings[x] := IntToStr(Liste[x].Zahl); End; Mein erster Ansatz sieht so aus:
Delphi-Quellcode:
Doch so kann ich ja nicht mehr einfach auf meine "Liste" zugreifen..
Type
TArray = Record Liste: Array Of PEintrag; End; PArray = ^TArray; |
AW: Pointer of Array of Pointer
eine weitere Idee wäre dieses hier, leider klappt es auch nicht:
Delphi-Quellcode:
Type
TListe = Array Of PEintrag; Liste = ^TListe; |
AW: Pointer of Array of Pointer
Mal schnell heruntergetippt und kurz ausprobiert:
Delphi-Quellcode:
type
PData = ^TData; TData = record Zahl: integer; end; TListe = array of PData; PListe = ^TListe; TForm1 = class(TForm) ... private { Private-Deklarationen } Liste: PListe; ... //10 Einträge hinzufügen procedure TForm1.Button1Click(Sender: TObject); var i: integer; NewData: PData; begin for i := 1 to 10 do begin SetLength(Liste^, Length(Liste^) + 1); New(NewData); NewData^.Zahl := Length(Liste^); Liste^[High(Liste^)] := NewData; end; end; //alle enthaltenen Werte ausgeben procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i := Low(Liste^) to High(Liste^) do ShowMessage(IntToStr(Liste^[i]^.Zahl)); end; //Liste anlegen procedure TForm1.FormCreate(Sender: TObject); begin New(Liste); end; //Aufräumen procedure TForm1.FormDestroy(Sender: TObject); var i: integer; begin for i := Low(Liste^) to High(Liste^) do Dispose(Liste^[i]); Dispose(Liste); end; |
AW: Pointer of Array of Pointer
Hau dem Typen / der Typin, der/die dir das befohlen hat, ein paar auf die Pfoten.
Am Besten garnicht erst soviele verschachtelte schlimme Dinge mit Pointern anfangen. |
AW: Pointer of Array of Pointer
Vielen Dank :-D
Ich kann meinem Ausbilder ja schlecht auf die Pfoten hauen :-P |
AW: Pointer of Array of Pointer
oder Du gibst es Ihm so richtig, ich war so frei DeddyH's Code als Basis zu nehmen
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type PData = ^TData; TData = record Zahl: integer; end; TListe = array of PData; PListe = ^TListe; PPListe = ^PListe; TForm2 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private Liste: PPListe; { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} //10 Einträge hinzufügen procedure TForm2.Button1Click(Sender: TObject); var i: integer; NewData: PData; begin for i := 1 to 10 do begin SetLength(Liste^^, Length(Liste^^) + 1); New(NewData); NewData^.Zahl := Length(Liste^^); Liste^^[High(Liste^^)] := NewData; end; end; //alle enthaltenen Werte ausgeben procedure TForm2.Button2Click(Sender: TObject); var i: integer; begin for i := Low(Liste^^) to High(Liste^^) do ShowMessage(IntToStr(Liste^^[i]^.Zahl)); end; //Liste anlegen procedure TForm2.FormCreate(Sender: TObject); begin New(Liste); New(Liste^) end; //Aufräumen procedure TForm2.FormDestroy(Sender: TObject); var i: integer; begin for i := Low(Liste^^) to High(Liste^^) do Dispose(Liste^^[i]); Dispose(Liste^); end; end. wer Bug's findet darf sie behalten .... |
AW: Pointer of Array of Pointer
das ist ja dann quasi ein Pointer der auf einen Pointer zeigt der auf das Array zeigt, oder? :lol:
|
AW: Pointer of Array of Pointer
Japp.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz