AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pointer of Array of Pointer

Ein Thema von Marcel2906 · begonnen am 7. Dez 2011 · letzter Beitrag vom 9. Dez 2011
Antwort Antwort
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Pointer of Array of Pointer

  Alt 7. Dez 2011, 12:35
Delphi-Version: 2010
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:
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;
dazu die interessanten Proceduren:

Delphi-Quellcode:
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;
Doch wie schaffe ich es jetzt ein Pointer auf das Array zeigen zu lassen?
Mein erster Ansatz sieht so aus:

Delphi-Quellcode:
   Type
      TArray = Record
         Liste: Array Of PEintrag;
      End;
      PArray = ^TArray;
Doch so kann ich ja nicht mehr einfach auf meine "Liste" zugreifen..
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Pointer of Array of Pointer

  Alt 7. Dez 2011, 12:48
eine weitere Idee wäre dieses hier, leider klappt es auch nicht:

Delphi-Quellcode:
Type
   TListe = Array Of PEintrag;
   Liste = ^TListe;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Pointer of Array of Pointer

  Alt 7. Dez 2011, 13:18
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#4

AW: Pointer of Array of Pointer

  Alt 7. Dez 2011, 13:20
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Pointer of Array of Pointer

  Alt 7. Dez 2011, 13:42
Vielen Dank

Ich kann meinem Ausbilder ja schlecht auf die Pfoten hauen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Pointer of Array of Pointer

  Alt 7. Dez 2011, 14:11
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 ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Pointer of Array of Pointer

  Alt 9. Dez 2011, 07:37
das ist ja dann quasi ein Pointer der auf einen Pointer zeigt der auf das Array zeigt, oder?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Pointer of Array of Pointer

  Alt 9. Dez 2011, 07:41
Japp.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz