Array bzw. Adresse aus Funktion ins Hauptprogramm übergeben



  • Danke erstmal für die sehr schnelle Antwort 🙂
    Ich hab das mal so eingearbeitet. Und es hat geklappt.
    Wie könnte ich jetzt die zwei Arrays a und b wieder in das Hauptprogramm zurückgeben. Die Arrays werden in der Funktion Eingabe gefüllt und sollen dann an das Hauptprogramm zurückgeliefert werden, damit sie dort zur Verfügung stehen. Ich weiß ja, dass man nicht die Felder selbst übergeben kann, sondern nur deren Adresse.



  • Die brauchst du gar nicht zurückgeben, die bleiben gleich beim Hauptprogramm. (die Array-Verarbeitung von C(++) ist etwas eigenwillig - faktisch übergibst du keine Kopie des Arrays, sondern nur dessen Adresse, so daß eingabe() direkt in dem Datenbereich schreibt, den main() sich reserviert hat.)



  • Ok gut zu wissen 🙂 Wie konnte man nochmal dann aus anderen Funktionen heraus auf die Arrays zugreifen, die ja im Hauptprogramm angelegt sind. Ich müsste die Felder ansonsten erst in den Funktionen irgendwie bekannt machen. Ansonsten meckert ja der Compiler wegen nicht deklarierter Bezeichner.



  • Genauso wie im obigen Beispiel - indem du sie als Parameter an die entsprechenden Funktionen übergibst (die Funktion 'eingabe()' aus meinem obigen Beitrag kann über a[i][j] auf die Elemente des Arrays zugreifen, das im Hauptprogramm als 'matrix_a' angelegt wurde).



  • Das mit den Matrizen hat funktioniert 👍 Weißt du auch wie ich das jetzt mit den Variablen zeile_a, spalte_a... mache. Diese werden ja ebenfalls in der Funktion Eingabe mit Werten belegt. Die Werte für zeile_a, spalte_a... benötige ich dann ja wieder z.B. in der Ausgabe. Diese Variablen sind ja keine Arrays sondern einfache Integerzahlen. Mache ich das dann über return?



  • Über return kannst du nur einen einzelnen Wert zurückgeben. Für weitere Werte mußt du die Variablen über Zeiger oder Referenzen übergeben:

    void eingabe(int mat[5][5],int* zeilen,int*spalten)
    {
      cin>>*zeilen;
      cin>>*spalten;
      ...
    }
    
    ...
    eingabe(matrix_a,&zeile_a,&spalte_a);
    ...
    
    //oder
    
    void eingabe(int mat[5][5],int& zeilen,int& spalten)
    {
      cin>>zeilen;
      cin>>spalten;
    }
    
    ...
    eingabe(matrix_a,zeile_a,spalte_a);
    ...
    

    PS: Empfehlung des Hauses: Anstelle der Arrays (bei denen du die Größe zur Laufzeit festlegen mußt) solltest du lieber verschachtelte vector<>en verwenden. Außer daß sie nahezu beliebig groß werden können, merken sie sich auch selber, wie groß sie sind.



  • Sehr gut, vielen vielen Dank dafür 👍 👍 👍
    Jetzt hätte ich noch eine Frage, wie kann man die Arrays dynamisch abspeichern und eingeben? Ich glaube diese Variante ist es nicht. Gab es da nicht irgendwas mit new und delete. Wie würde denn das ungefähr bei meinem Beispiel aussehen?



  • CStoll schrieb:

    PS: Wenn du mit der Arraygröße nicht auf 5*5 beschränkt bleiben willst, schau dir die Lösungen aus der FAQ an 😉

    😉



  • Guckst du nach oben - dort habe ich einen passenden FAQ-Eintrag verlinkt (und das nicht nur zum Spaß ;))



  • Oh ja richtig 😃
    Wer lesen kann ist klar im Vorteil...


Anmelden zum Antworten