Tutorial Zeiger/Pointer in Delphi

  • geschlossen
  • Delphi

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tutorial Zeiger/Pointer in Delphi

    Hallo...

    ich schreibe in wenigen Wochen mein Info-Abi.
    Könnte mir jemand ein gutes Tutorial geben,
    wo Zeiger in Delphi erklärt werden.
    Also ich möchte eine Liste erstellen mit Zeigern,
    bzw. einen Baum.

    Ist das irgendwo gut erkärt??

    mfg Feivel
  • hoi...

    hab da was mittels google innerhalb von 0,25sec. gefunden:

    http://www.wer-weiss-was.de/theme159/article1475396.html schrieb:




    Ich stell mir das eigentlich nicht so schwer vor...
    Es wird doch im Prinzip nur auf eine Stelle im Speicher
    "gezeigt",aber wozu das ganze und wie vor allem?

    genau so ist es. Und an dieser Stelle befindet sich etwas. Z.B. eine Variable, ein Record o.ä.

    Den Zeiger kann man zu verschiedenen Dingen brauchen. Wenn du zB größere Records sortieren willst (also zB Records, die Adressen enthalten) so musst du normalerweise beim Sortieren häufig den Inhalt zweier Records miteinander vertauschen und brauchst dazu noch einen Hilfsrecord, der voübergehend den Inhalt des einen aufnimmt zB (vertauschen von rec[1] und rec[7])

    temp.Name := rec[1].Name;
    rec[1].Name := rec[7].Name;
    rec[7].Name := temp.Name;

    und das musst du dann noch für rec[].Strasse, rec[].HausNr etc. machen. Und das ganze ein paar hundert mal beim Sortieren.

    wenn du statt dessen mit Pointern arbeitest, brauchst du nur die Pointer miteinander zu tauschen. Dh statt große Speicherbereiche hin- und her zu schaufeln eben nur ein paar Pointer. Das gibt ordentlich Performancegewinn.

    Du kannst an Funktionen Pointer übergeben und die Funktion kann dann das Objekt, auf das der Pointer weist behandeln (Delphi macht das automatisch wenn du einen Parameter der Funktion als "var" kennzeichnest). Das ist dann nötig, wenn du zB C-Bibliotheken einbindest.

    Es gibt typisierte und untypisierte Pointer. Der erste kann nur auf bestimmte Typen von Variablen oder Objekte verweisen, der zweite auf beliebige.
    typisiert:

    var
    pTypisiert = ^MeinRecordTyp; //kann nur auf den Typ "MeinRecordTyp weisen
    pUntypisiert = Pointer;

    Mit dem ersten verhinderst du, das irgendetwas durcheinandergebracht wird, was nicht passt.

    Wenn du einem Pointer die Adresse einer Variable oder eines Objekts zuweisen willst geht das so:

    MeinPointer := @MeinVariable;

    (@ = "Adresse von" bzw "Speicherposition von") Damit verweist der Pointer "MeinPointer" auf die Variable "MeinVariable".

    Aus einem Buch den Quellcode abschreiben ist langweilig.

    Es ist aber nützlich, diese Codes sich mal anzuschauen und sich zu fragen, was der Gewinn bei der Benutzung der Pointer ist.


    Ja, Zeiger sind Variablen, die eine Speicheraddresse enthalten. Nicht mehr. Interessant aber, was man damit machen kann:


    - einen flexiblen (untypisierten) Zugriff auf Daten ermöglichen
    - Datenreihen verwalten können, ohne die Daten selbst im Speicher verschieben zu müssen

    Hinzu kommt:

    Mit Zeigern kann man VERKETTETE Listen erstellen. Dazu erstellt man einen zusammengesetzten Datentyp (Record), der neben den eigentlichen Datenfeldern noch einen (oder mehrere) Zeiger enthält. Diese(r) Zeiger zeigt auf andere Records. Damit lassen sich z.B. über die Zeiger verkettete Listen erstellen, wobei die Größe der Liste dynamisch zugewiesen werden kann. Wie Nils schon gesagt hat, lassen sich solche Listen schneller sortieren wie zB Arrays.

    Enthält ein Record mehrere Zeiger, entstehen VERZWEIGTE Listen oder BAUMSTRUKTUREN. Sie sind das ideale Werkzeug für eine hierarchisch geordnete representation von Daten im Speicher. Sie erlauben sehr effiziente Sortier- und Suchalgorithmen.


    greetz KuschelBaer
    Das beliebteste Haustier der Deutschen ist und bleibt das halbe Hähnchen.