Zweifach-, Dreifachpointer (mehrdimensionale Felder)



  • Hallo Zusammen,

    mir als C/C++-Beginner machen (natürlich) Pointer ein wenig zu schaffen. Vor kurzem hatte ich einen Code gesehen, in dem ein zweidimensionales Array (Bildverarbeitung) sowie Zweifach- als auch Dreifach-Pointer verwendet wurden.

    Ich habe eine generelle Frage, ohne Bezug zu spezifischem Code:
    Worin besteht der Sinn/Zweck bzw. der Praxisbezug für diese Pointer? Werden diese speziell bei Arrayarithmetik verwendet?

    Ich danke vorab vielmals für eure aufklärenden Rückmeldungen 🙂


  • Mod

    cdundee schrieb:

    mir als C/C++-Beginner

    Was denn? C oder C++? Wenn auf deinem Lehrbuch C/C++ draufsteht, dann kannst du es gleich wegwerfen. Sind zwei sehr verschiedene Sprachen mit völlig unterschiedlichen Herangehensweisen - trotz einer gleichartigen Grammatik. Beispielsweise würdest du in C++ niemals Pointer so benutzen wie hier beschrieben. Nun, in C eigentlich auch nicht, aber in C++ erst recht nicht.

    machen (natürlich) Pointer ein wenig zu schaffen. Vor kurzem hatte ich einen Code gesehen, in dem ein zweidimensionales Array (Bildverarbeitung) sowie Zweifach- als auch Dreifach-Pointer verwendet wurden.

    Im Prinzip steckt dahinter der Wunsch, eine Liste von mehreren Arrays zu haben. So wie zum Beispiel bei den (optionalen) Argumenten der main-Funktion:
    Übliche Schreibweise:

    int main(int argc, char* argv[]);
    

    ist identisch zu (falls du das noch nicht wusstest):

    int main(int argc, char** argv);
    

    argv ist hier ein Zeiger auf ein Array von char*, die jeweils auf eine Zeichenkette mit den Komandozeilenargumenten zeigen. Solche Datenstrukturen kannst du nur mit mehrfacher Indirektion erzeugen.

    Meistens jedoch handelt es sich um einen Designfehler. Die häufigsten beiden:
    1. 2D-Arrays: Nein, 2D-Arrays sind keine Doppelzeiger* und brauchen diese auch nicht um an Funktionen übergeben zu werden. Ein "rechteckiges" Arrays lässt sich viel einfacher und schneller als ein 1D-Array darstellen, bei dem beim Zugriff die Indizes umgerechnet werden. Ich vermute, dass dies bei dem von dir erwähnten Bildverarbeitungscode der Fall ist.
    Die Pointer auf Pointer brauchst du, wenn die "inneren" Arrays dynamisch sein sollen, also wenn sie beispielsweise unterschiedlich groß sind.
    2. Fehlende Abstraktion: Google: three star programmer

    *: Und 1D-Arrays sind ebenfalls keine Zeiger.



  • Hallo SeppJ,

    vielen Dank für Deine schnelle Antwort.
    Hat mir ein wenig weitergeholfen, auch wenn sie ehrlich gesagt (für mich) fortgeschritten formuliert ist 🙂

    Vielleicht hast Du oder jemand anderes ein paar Links für mich, die mir die Sache mit den Listen mehrerer Arrays und Zeigern in "for-Dummies"-Manier näher bringt?


  • Mod

    Ich denke, hilfreicher sind Links zu allgemeinem C:
    http://www.c-plusplus.net/forum/300567

    Denn speziell zu dem Thema wird es kaum Erklärungen geben (zudem sind Internettutorials meistens ziemlich schlecht), da das Verständnis von mehrfachen Pointern eigentlich ganz natürlich kommt, wenn man einfache Zeiger versteht. Das ist halt das gleiche, bloß mehrmals nacheinander.



  • Ok, erneut vielen Dank!



  • zweimal vielen dank gibt dann wohl sehr vielen dank
    😛


Anmelden zum Antworten