dynamisches Array aus Funktion zurückgeben



  • Hallo,
    ich habe das folgende Problem:
    In einer Funktion erzeuge ich zwei dynamische eindimensionale Arrays (die Größe legt der Benutzer bei der Eingabe fest). Nun möchte ich diese auch außerhalb meiner Funktion weiterverwenden. Die Größe gebe ich per Call by reference zurück, was auch so weit klappt, aber wie kann ich die Aderessen der beiden Arrays an meine main() übergeben oder von der main() aus auf sie zugreifen? Dynamische Variablen sind ja nicht wie lokale Variablen durch Blöcke begrenzt.
    Schon mal vielen Dank für euere Hilfe.
    Gruß, Matthias.

    void eingabe (int *m_a, int *zeilen_a, int *spalten_a, int *m_b, int *zeilen_b, int *spalten_b)
    {   cout << "Bitte Typ eingeben (Matrix A):" << endl;
        cout << "  Zeilen: " << endl;  cin >> *zeilen_a;
        cout << "  Spalten: " << endl; cin >> *spalten_a;
        cout << "Bitte Typ eingeben (Matrix B):" << endl;
        cout << "  Zeilen: " << endl;  cin >> *zeilen_b;
        cout << "  Spalten: " << endl; cin >> *spalten_b;
    
        int *matrix_a, *matrix_b;
        int feld_a, feld_b;
    
    	feld_a = *zeilen_a * *spalten_a;
    	feld_b = *zeilen_b * *spalten_b;
    
    	matrix_a = new int[feld_a];
    	matrix_b = new int[feld_b];
    
           // Hier weiß ich nicht weiter, wie ich die Adressen
           // bzw. dyn. Arrays übergeben könnte
    }
    
    void main()
    {	int *matrix_a, zeilen_a, spalten_a, *matrix_b, zeilen_b, spalten_b;
    
    	eingabe(matrix_a, &zeilen_a, &spalten_a, matrix_b, &zeilen_b, &spalten_b);
    
    // weitere Verarbeitung der Matrizen 
    }
    


  • Matti schrieb:

    Die Größe gebe ich per Call by reference zurück, was auch so weit klappt, aber wie kann ich die Aderessen der beiden Arrays an meine main() übergeben oder von der main() aus auf sie zugreifen?

    Hallo,

    wie währe es wenn du es mit einem call by reference versuchst:

    void eingabe (int **m_a, int *zeilen_a, int *spalten_a, int **m_b, int *zeilen_b, int *spalten_b)
    {   cout << "Bitte Typ eingeben (Matrix A):" << endl;
        cout << "  Zeilen: " << endl;  cin >> *zeilen_a;
        cout << "  Spalten: " << endl; cin >> *spalten_a;
        cout << "Bitte Typ eingeben (Matrix B):" << endl;
        cout << "  Zeilen: " << endl;  cin >> *zeilen_b;
        cout << "  Spalten: " << endl; cin >> *spalten_b;
    
        int feld_a, feld_b;
    
        feld_a = *zeilen_a * *spalten_a;
        feld_b = *zeilen_b * *spalten_b;
    
        *matrix_a = new int[feld_a];
        *matrix_b = new int[feld_b];
    
           // Hier weiß ich nicht weiter, wie ich die Adressen
           // bzw. dyn. Arrays übergeben könnte
    }
    
    void main()
    {    int *matrix_a, zeilen_a, spalten_a, *matrix_b, zeilen_b, spalten_b;
    
        eingabe(&matrix_a, &zeilen_a, &spalten_a, &matrix_b, &zeilen_b, &spalten_b);
    
    // weitere Verarbeitung der Matrizen
    }
    

    ich habs nicht auf syntaktische korektheit geprüft, aber das prinzip funktioniert so wie bei integern auch.

    mfg



  • Das ist allerdings beides kein call by reference sondern ganz normal die übergabe eines pointers. Call by Reference sähe so aus:

    #include <iostream>
    using namespace std;
    
    void eingabe (int *(&m_a), int &zeilen_a, int &spalten_a, int *(&m_b), int &zeilen_b, int &spalten_b)
    {   cout << "Bitte Typ eingeben (Matrix A):" << endl;
        cout << "  Zeilen: " << endl;  cin >> zeilen_a;
        cout << "  Spalten: " << endl; cin >> spalten_a;
        cout << "Bitte Typ eingeben (Matrix B):" << endl;
        cout << "  Zeilen: " << endl;  cin >> zeilen_b;
        cout << "  Spalten: " << endl; cin >> spalten_b;
    
        int feld_a, feld_b;
    
        feld_a = zeilen_a * spalten_a;
        feld_b = zeilen_b * spalten_b;
    
        m_a = new int[feld_a];
        m_b = new int[feld_b];
    
           // Hier weiß ich nicht weiter, wie ich die Adressen
           // bzw. dyn. Arrays übergeben könnte
    }
    
    void main()
    {    int *matrix_a, zeilen_a, spalten_a, *matrix_b, zeilen_b, spalten_b;
    
        eingabe(matrix_a, zeilen_a, spalten_a, matrix_b, zeilen_b, spalten_b);
    
    // weitere Verarbeitung der Matrizen
    }
    

    Gruß
    Entyl Sa


Anmelden zum Antworten