Ergebnis 1 bis 10 von 10
  1. #1
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    67

    Standard Object Pascal - Zeigertypen Beispielaufgaben?

    Hallo Leute,

    In der Uni programmieren wir derzeit in Object Pascal. Eine tolle Sprache finde ich, allerdings ist trotz der strengen Typisierung und der recht simplen Syntax das eine oder andere Thema recht haarig im Verständnis.

    Wir beginnen zur Zeit mit Zeigern zu arbeiten. Mir fehlt noch ein wenig das wirklich tiefe Verständnis ihrer Funktionalität.
    Hat jemand evtl. eine kleine Beispielaufgabe parat? Wenn's nicht zu nervig ist, auch gerne mehr mit verschiedenen Anwendungsbeispielen, da Pointer ganz unterschiedlich verwendet werden können, so wie ich das verstehe.

    Lieben Gruß,
    sontyp

    PS.: Falls einer sich gut mit Lazarus auskennt und es ihm AdHoc einfällt: Weiß jemand, wie ich die Fenster alle zusammenschweißen kann? Find's albern, dass Menüleiste und Editor nicht zusammen hängen.

    //Happy debugging, suckers!
    #define
    true (rand() > 10)
    #define struct union



  2. #2
    Master of Porn Avatar von sp1nny
    Registriert seit
    28.05.2007
    Beiträge
    533

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Geht es dir um die Anwendungsgebiete von Pointern oder die Funktionsweise an sich?

    In dem folgenden Video werden Pointer sehr gut erklärt:


    Ein einfaches Anwendungsbeispiel sind z.B. Linked Lists

  3. #3
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    801

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Ich kann dir da nachher mal ein Beispiel zusammenkleistern, weiß nicht ob ich heute Abend dazu komme. Wenn dir noch irgendwas bestimmtes einfällt was du wissen möchtest sag bescheid^^

  4. #4
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    67

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Hey, danke für die schnellen Antworten!
    Die Anwendung der Linked Lists war mir vom Verständnis noch etwas zu komplex.
    Mir ist jetzt noch besser klar, wie das mit Pointern in Bezug auf den RAM funktioniert. Allerdings fehlt mir noch ein wenig das Verständnis wofür genau es Sinn macht sich die Speicheradresse einer Variable zu merken. Führt das zu Laufzeitverbesserungen? Aus der Informationstechnik wissen wir ja, dass bei einer Anfrage nach einer Variable erstmal die MMU in angestrengt werden muss. Dank dem Cache können wir uns allerdings Adressen für die zuletzt benutzten Adressen merken. Andererseits muss man doch beim Zugriff auf die Pointervariable auch wieder die MMU bemühen, zu erfahren, welche Speicheradresse die Pointervariable hat, oder nicht?

    //Happy debugging, suckers!
    #define
    true (rand() > 10)
    #define struct union



  5. #5
    Sobig Wurm Avatar von Leange
    Registriert seit
    06.09.2008
    Beiträge
    220

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Allerdings fehlt mir noch ein wenig das Verständnis wofür genau es Sinn macht sich die Speicheradresse einer Variable zu merken.
    Ich hab keine Ahnung von Object Pascal xD
    Gibts ne Möglichkeit Werte an Funktionen per Referenz zu übergeben?
    Sprich du arbeitest in der Funktion mit der originalen Variable und nicht mit ner Kopie? (Macht z.B. Sinn für sehr große Werte wenn du Speicher sparen willst).

    Falls nicht, kannst du in dem Fall z.B. nen Pointer übergeben. ^^

    MfG Leange

    Freiheit stirbt mit Sicherheit

  6. #6
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    67

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Es gibt Referenzparameter, die den eingegebenen Wert innerhalb verarbeiten und danach auch nach außenhin verändern. Übergibst du also Variable A auf den Referenzparameter B, wird nach Verarbeitung auch Variable A geändert.

    //Happy debugging, suckers!
    #define
    true (rand() > 10)
    #define struct union



  7. #7
    Sobig Wurm Avatar von Leange
    Registriert seit
    06.09.2008
    Beiträge
    220

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Ah OK Aber wenn ichs richtig verstehe ist B trotzdem ne Kopie von A.
    Edit: Oder auch nicht. Kann sein das es prinzipiell schon nen Pointer ist. xD

    Wenn A jetzt z.B. riesiges Array ist kann es Sinn machen nen Pointer zu A zu erstellen und den zu ergeben anstatt A.

    Generell in C++ gilt Pointer nur zu verwenden wenn dir nichts anderes übrig bleibt. xD
    Wird wohl bei OP auch so sein. ^^
    Geändert von Leange (17.12.2016 um 21:41 Uhr)

    Freiheit stirbt mit Sicherheit

  8. #8
    Master of Porn Avatar von sp1nny
    Registriert seit
    28.05.2007
    Beiträge
    533

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Stell dir vor du hast eine Datenmenge die du in einem Array speicherst das eine feste Größe hat. Wenn du jetzt weitere Daten hinzufügst stößt du irgendwann an die Größe des Arrays und musst ein neues größeres erstellen, wodurch du jedes Element in ein neues Array kopieren musst, was bei sehr großen Datenmengen viele Rechenoperationen benötigt. Wenn du mit dynamischen Datenstrukturen verwendest (mithilfe von Pointern) kannst du stattedessen einfach beliebig viele Elemente hinten anhängen.

    Das ganze könnte beispielsweise so aussehen:

    Code:
    #include <iostream>
    
    struct node {
        double someData;
         node* next;
    };
    typedef struct node node;
    
    void insert(node* list, node* newNode){
        while(list->next){
            list = list->next;
        }
        list->next = newNode;
    }
    
    void printList(node* list){
        while(list){
            std::cout << list->someData << std::endl;
            list = list->next;
        }
    }
    
    int main() {
        node* root = new node;
    ​    root->someData = 42.0;
    
        node* a = new node;
        a->someData = 3.14159;
    
        node* b = new node;
        b->someData = 2.71828;
    
        insert(root, a);
        insert(root, b);
    
        printList(root);
    
        return 0;
    }
    Geändert von sp1nny (18.12.2016 um 07:50 Uhr)

  9. #9
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    801

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Ich habe dir wie gesagt mal was zusammengeschrieben, sieht vielleicht auf den ersten Blick ein bisschen Wild aus. Sind drei Beispiele in einem, hoffe man kommt beim lesen dadurch nicht zu sehr durcheinander.
    Das erste Beispiel ist n Praxisfall den ich schon des öfteren so in der Art eingesetzt habe, ein ListView wird verwendet, man kommt schnell zu dem Punkt wo man zu nem Listenpunkt irgendwelche Daten speichern möchte. Hierzu kann man den Pointer zu irgendetwas (in diesem Fall ein dynamisch erstellter Button) in der Data-Property speichern.

    Das zweite ist ne kleine Spielerei, es soll dir zeigen wie das von der Syntax her funktioniert auf eine typenlose Pointervariable typisiert zuzugreifen, hierzu wird byteweise aus dem Speicher gelesen und integerweise geschrieben. In dem Eingabefeld kannst du dazu wirklich irgendwo in den Speicher des Prozesses schreiben, hauptsache du hast die Zugriffsrechte und der Bereich existiert. Es ist aber halt dazu gedacht an die angezeigte Heap Adresse und umzu zu schreiben.

    Das dritte Beispiel zeigt wie man ne einfache linked list selbst basteln kann. Das kann dir unter anderem von Nutzen sein wenn du irgendwelche Bibliotheken benutzt, in (Win)PCap z.B. werden die Capture-Interfaces in ner linked list abgefragt.


    Ich habe das ganze mit Lazraus 1.6 auf Linux geschrieben, sollte aber auch problemlos auf Windows laufen, auch in Delphi. Falls nicht (habs nicht auf win/delphi ausprobiert) eben bescheid sagen, dann passe ich es an.


    Zum so angucken: https://nopaste.me/view/dbab60fb
    Projektdateien zum rumspielen: http://www70.zippyshare.com/v/NHFqlP6E/file.html

  10. #10
    Trojaner Avatar von sontyp
    Registriert seit
    16.09.2016
    Beiträge
    67

    Standard AW: Object Pascal - Zeigertypen Beispielaufgaben?

    Hey! Danke Leute für die hilfreichen Erklärungen! Nur C/C++ hilft mir manchmal nicht ganz weiter, bin da noch zu unbewandert.

    Dass dein Beispiel in Lazarus ist, ist super, nutze ich privat auch. Das umbauen ist für mich mittlerweile auch kein Problem, im Grunde muss man ja nur die Compilerschalter von Delphi einfügen (Apptype etc.) und die Uses vom Namen anpassen.
    Vielen Dank, ich versuch mich mal dran. Bisher sind wir vom Lernstand bei doppelt verketteten Listen, also allzu dramatisch, wie ich befürchtet hatte, wird es in der entsprechenden Übung nicht.

    An sich kann das Thema dann jetzt geclosed werden. Würde mich dann beim Aufgabensteller direkt melden, wenn ich Anmerkungen/Fragen habe. Es sei denn jemand würde das gern mitlesen. Dann natürlich gern offen lassen

    Greetz sontyp

    Ach und: Frohes Neues

Ähnliche Themen

  1. Pascal
    Von Nikcross im Forum Sonstige Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 25.08.2010, 14:20
  2. Pascal in der schule
    Von eQuliZed im Forum Sonstige Programmiersprachen
    Antworten: 3
    Letzter Beitrag: 03.06.2009, 14:35
  3. Antworten: 2
    Letzter Beitrag: 27.10.2008, 18:22
  4. Pascal lernen
    Von Ch4os im Forum Sonstige Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 02.09.2008, 12:39

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •