Zeiger auf Zeiger als Methoden-Parameter



  • Bergmann89 schrieb:

    [...] weil ich mittlerweiße ein char*** übergebe, das hat mich wohl leicht verwirrt...

    Du 3-Sterne-Programmierer. 😉



  • Hehe^^ Ich weiß aber auch nich wie ich es anders lösen soll. Ich brauch ein dynamisches Array aus Zeigern auf ein dynamisches Char-Array. Und wenn ich dieses Array an die Methode weiter geb, dann hab ich halt 3 Zeiger. Mann könnte ja auch einfach sagen es is ein Array of String, aber wir sollen es erstmal "klassisch" mit char-Pointern machen?! Zur besseren Übersicht könnte ich mir eigene Typen definieren, aber intern wäre es auch nix anderes...



  • std::vectorstd::string



  • Bergmann89 schrieb:

    ...Mann könnte ja auch einfach sagen es is ein Array of String, aber wir sollen es erstmal "klassisch" mit char-Pointern machen?!...

    Im "klassischen" (C-Weg) würde ich die Frage vorzugsweise im C-Forum stellen, da die dortigen eher mit Zeigerverrenkungen arbeiten 😉

    Eine Kombination zwischen "Klassischer" (tendenziell C) und der C++ Programmierung wurde schon erwähnt: Referenzen. Ich würde Referenzen immer den Vorzug geben, wenn ein NULL-Wert nicht zulässig sein soll.

    Kleines Beispiel an einer int-Übergabe:

    void foo1(int a) // Ändert nichts, wie in deinem Problem
    {
      a = 10;
    }
    
    void foo2(int * a) // Der Weg wie unter C
    {
      *a = 10;
    }
    
    void foo3(int & a) // Unter C++ imho der üblichere Weg
    {
      a = 10;
    }
    

    Und man kann durchaus Zeiger mit Referenzen kombinieren. So könnte man z.B. den Übergabeparameter von foo2, wenn man den Zeiger ändern will, in eine Zeigerreferenz ändern "*&".



  • Bergmann89 schrieb:

    ...wir sollen es erstmal "klassisch" mit char-Pointern machen...

    🙄
    Wieder mal ein Fall von "'klassisch' = 'Lehrer war zu faul, sich in die neue Sprache einzuarbeiten'"...

    Kannst Du nix für, solltest Du dem "Lehrer" (oder wer immer die Vorgabe macht) mal stecken: Der von JanJan skizzierte Weg ist seit nunmehr 12 Jahre Standard ... also etwa seit der Einschulung eines heutigen Abiturienten.

    Bergmann89 schrieb:

    ...aber intern wäre es auch nix anderes...

    Nunja ... mit dem Argument müsste man eigentlich Assembler (wenn nicht noch weiter unten anpacken) programmieren. 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Wieder mal ein Fall von "'klassisch' = 'Lehrer war zu faul, sich in die neue Sprache einzuarbeiten'"...

    Vermutlich kann man froh sein dass der Lehrer kein Fahrlehrer geworden ist, sonst müssten die Fahrschüler den Wagen noch "klassisch" mit der Kurbel anwerfern 😉



  • Bergmann89 schrieb:

    Hehe^^ Ich weiß aber auch nich wie ich es anders lösen soll. Ich brauch ein dynamisches Array aus Zeigern auf ein dynamisches Char-Array. Und wenn ich dieses Array an die Methode weiter geb, dann hab ich halt 3 Zeiger.

    Mit "dynamisches Array" meinst Du, dass das Array im Freispeicher angelegt worden ist, oder? Sonst könnte man noch "dynamisch" benutzen, um ein intelligentes Feld zu beschreiben, was automatisch wachsen kann (wie zB vector).

    Ich komme allerdings nur auf zwei Sterne. Es sei denn, Du willst der Funktion den Zeiger auf den Zeiger auf das erste Element im Array übergeben. Das müsstest Du aber nur machen, wenn die Funktion den Zeiger auf das erste Element des Zeiger-Arrays verändern soll/will.



  • Hey,

    @asc: Habs jetz mit ner Refernz auf den Zeiger gemacht, da hab ich nur noch **&^^
    @krümelkacker: Ja, die Methode soll den Zeiger ändern könne, da es das Array bei bedarf größer machen soll. Also leg ich ein neues Array an, kopier den Inhalt des Alten in das Neue, änder den Zeiger auf das neue und lösch zum Schluss das Alte. Deshalb die 3 Zeiger, oder jetz halt die Referenz auf die 2 Zeiger...

    MfG % Thx Bergmann



  • Bergmann89 schrieb:

    @krümelkacker: Ja, die Methode soll den Zeiger ändern könne, da es das Array bei bedarf größer machen soll. Also leg ich ein neues Array an, kopier den Inhalt des Alten in das Neue, änder den Zeiger auf das neue und lösch zum Schluss das Alte. Deshalb die 3 Zeiger, oder jetz halt die Referenz auf die 2 Zeiger...

    Besser wär natürlich wenn du anfängst C++ zu programmieren.



  • Janjan schrieb:

    Besser wär natürlich wenn du anfängst C++ zu programmieren.

    Less doch mal den Thread aufmerksam durch: Es ist eine Lehrervorgabe, und einige Lehrer sind Lernresistent. Ich sage nicht, das es keinen Sinn macht niemals mit Zeigern etc. zu hantieren, würde dies aber erst machen, nachdem man sich schon ein wenig mit Programmlogik etc. beschäftigt hat (Sprich anfangs gleich Dinge wie std::string und in begrenzten Umfang std::vector verwendet [Man muss ja nicht alle Funktionalitäten kennen lernen, sondern nur das anfänglich nötigste]).



  • Hey,

    seh ich auch so. Vlt denkt unser Prof, dass wir das nich brauchen, weil wir vorher Java hatten un da drauf haben sollten . . . wer weiß. Ich werd nochma mit dem reden, denn in der 2. Aufgabe sollen wir das dann alles auf CString umbauen, ob wir da auch den normalen string nehmen können (wäre ja das einfachste). Ich hätt es sowieso anders gemacht. Erst string, das man's versteht und dann auf Array of Char umbauen. Das hätte meiner Meinung nach mehr Sinn...

    MfG Bergmann


Anmelden zum Antworten