Zugriff auf Elemente eines 2D-Arrays nach Übergabe an Funktion



  • Guten Abend,

    ich möchte zu Testzwecken ein 2-dimensionales Array (Matrix) an eine Funktion übergeben, um dort mit den einzelnen Elementen zu rechnen. Mein Problem ist, wie ich nach der Übergabe an die Elemente herankomme. Mein Code sieht wie folgt aus:

    #include <iostream>
    
    using namespace std;
    
    void show_matrix(int*,int,int);
    
    void show_matrix(int* matrix1, int zeilen, int spalten)
    {
      // Wie komme ich hier z.B. an matrix1[1][1]?
    }
    
    int main(int argc, char** argv)
    {
      int zeilen=2;
      int spalten=2;
      int value;
      int** matrix1 = new int*[zeilen];
      for(int i=0;i<zeilen;i++)
        {
          matrix1[i]=new int[spalten];
        }
      matrix1[0][0]=1;
      matrix1[0][1]=2;
      matrix1[1][0]=3;
      matrix1[1][1]=4;
      show_matrix((int*)matrix1,zeilen,spalten);
      return 0;
    }
    

    Der Speicher ist dynamisch angelegt, da die Matrix später größer werden kann. Zudem ist die Zuweisung der Werte ebenfalls später variable, daher im Moment erstmal die unschöne Zuweisung "per Hand".
    Soweit ich weiß, wird doch beim Aufruf von show_matrix mit int*matrix1 die Startadresse an die Funktion übergeben. Es wird also doch auf das 1. Element gezeigt, alle weiteren Elemente stehen ja dahinter. Von daher hatte ich probiert, ein Element einfach zu dereferenzieren, aber das funktionierte nicht.

    Bedanke mich schonmal!



  • Dein Matrixarray in main ist ein Zeiger auf Zeiger, was du als Array von Arrays verwenden kannst. Soweit so gut 😉 Das castest du auf einen Zeiger auf int. Wie soll das denn bitte gut gehen? Deine matrix in main ist kein zeiger auf einen durchgehenden Speicherblock und kann auch nicht so verwendet werden. Übergib doch einfach deinen int** ganz normal wie jeder andere auch.



  • Joa stimmt natürlich, hatte vorher noch mit 1D bzw. normalen Arrays hantiert und hab das völlig ausgeblendet...Danke!



  • delete nicht vergessen! 🙂
    oder entsprechende Containerklasse.


Anmelden zum Antworten