Zeiger auf Zeiger?



  • Einen Zeiger auf einen Zeiger verwendest du, wie in dem COM-Beispiel, wenn du in der Funktion Speicher allokierst den du zurückliefern willst. Das heisst, wenn du das auf das der Zeiger zeigt, erstellen musst.

    mfg JJ



  • Hallo,

    ist deine erste Antwort ernst gemeint oder war das als Ulk gedacht?



  • In C hat man das gebraucht, wenn man einen Zeiger an eine Funktion übergeben wollte und dieser manipulierbar sein musste

    void alloc_10_memory(void *ptr) {
      ptr=malloc(10);
    } //hier entsteht ein Speicher leck
    
    void alloc_10_memory(void **ptr) {
      *ptr=malloc(10);
    } //alles klar
    

    in C++ gibt es dafür aber Referenzen. Dann kann man einen Zeiger auf einen Zeiger dafür benutzen um 2 Dimensionale (dynamische) Arrays darzustellen. Aber das macht man in C++ dank STL mittlerweile auch anders.



  • kingruedi schrieb:

    in C++ gibt es dafür aber Referenzen.

    eben nicht!

    aber zeiger auf zeiger tauchen denoch in manchmal c++ auf. sogar in sauberem c++, womit ich COM explizit ausschließe.

    der code für nen einfachen binärbaum (einfügen. löschen, suchen, istLeer, konstruktor, destruktor, NoCopy) fällt zum beispiel auf zwei seiten zusammen, wenn man ne Knoten**find(VALUE const& v) baut, die auf die Kante (und eine Knate ist ja ein Zeiger auf nen Knoten) zeigt, wo dieser suchwert landen würde bzw zu finden ist).
    aber ich glaube, sowas macht man heutzutage nicht mehr. man kann ja alles im supermarkt kaufen.



  • danke 👍 , sowas werde ich wohl nicht so schnell brauchen



  • ich finde, ein beispiel mit com-objekten ist ein bisschen zu viel overkill für einen Anfänger 😉

    eine ganz einfache anwednung ist auch, wenn man ein zweidimensionalen array will:

    int **pp;
    pp=new int*[10];
    for (int i=0; i<10; i++) pp[i]=new int[5];
    

    damit hast du einen Array von 10 Pointern, die jeweils wieder auf 5 Elemente Zeigen. Ansprechen aknnst du so einen Array, indem du pp[5][3] schreibst. Damit ist das dritte Element des 5ten von insgesamt 10 Elementen gemeint.



  • randa schrieb:

    damit hast du einen Array von 10 Pointern, die jeweils wieder auf 5 Elemente Zeigen. Ansprechen aknnst du so einen Array, indem du pp[5][3] schreibst. Damit ist das dritte Element des 5ten von insgesamt 10 Elementen gemeint.

    Sagen wir mal das vierte Element des sechsten von insgesamt zehn Elementen.



  • stimmt 😉
    war zu vorschnell



  • @randa
    für so was nimmt man aber lieber std::vector<std::vector<foo> > oder boost::array<boos::array<foo,10>,10>. Da hat man gleich viel weniger Arbeit, Exception Sicherheit etc.



  • Richtig! Nichts entwickeln, das es bereits (besser!) gibt. D.h. von Anfang an STL und boost einsetzen, damit man bei C++ volle Effizienz hat.


Anmelden zum Antworten