Mehrdimensionale Arrays als Parameter und Ausgabewert von Funktionen



  • Hallo 🙂
    Ich arbeite an einem Programm, für das ich 4-dimensionale Arrays an Funktionen übergeben und wieder zurückgeben möchte.

    So weit ich weis geht das nicht so einfach, zumindest wenn ich die Arraygröße nicht genau benennen kann (ich könnte die ersten 3 benennen, aber die 4. ist beliebig).

    Ich vermute mal, dass ich das Ganze über Pointer lösen muss, aber von denen habe ich so gut wie keine Ahnung.

    Danke für Eure Hilfe im Voraus 🙂

    MfG Steffen



  • Ebbe21 schrieb:

    (ich könnte die ersten 3 benennen, aber die 4. ist beliebig).

    Wenn du mit "kennen" zur Compilezeit kennen meinst, ist die Sache sehr einfach:

    int bla( int array4[][7][8][9] )
    {
      int x,y,z;
      for(x=0;x<sizeof*array4/sizeof**array4;++x)
        for(y=0;y<sizeof**array4/sizeof***array4;++y)
          for(z=0;z<sizeof***array4/sizeof****array4;++z)
            printf("%d",(*array4)[x][y][z]);
      ...
    }
    

    Bei Änderungen der Dimensionsgrößen brauchst du dies hierbei nur in der Paramterliste anpassen.



  • Vielen Dank 🙂 Die Reihenfolge machts ^^ ich habe

    int bla(int blub[1][2][3][]){
    }
    

    probiert.

    Jetzt habe ich nur noch das Problem mit der Ausgabe. Wie bekomme ich jetzt das Array aus der Funktion wieder raus?



  • Wieso rausgeben? Änderungen, die du innerhalb der Funktion am Array machst, schlagen sofort auf das übergebene Array bzw. dessen Inhalt durch.



  • Ich dachte das würde nur bei übergebenen Pointern passieren? Aber ok 🙂 und nochmals Danke.

    Nur eine letzte Frage noch: Wie geht nun die Übergabe wenn ich die Arraygrößen nicht kenne?



  • Ebbe21 schrieb:

    Nur eine letzte Frage noch: Wie geht nun die Übergabe wenn ich die Arraygrößen nicht kenne?

    Gar nicht 😉

    Bastel dir ein Objekt, welches dein mehrdimensionales Array auf ein eindimensionales mapped und übergib eine Instanz solch eines Objektes.



  • Ebbe21 schrieb:

    Ich dachte das würde nur bei übergebenen Pointern passieren? Aber ok 🙂 und nochmals Danke.

    Nur eine letzte Frage noch: Wie geht nun die Übergabe wenn ich die Arraygrößen nicht kenne?

    Du übergibst ja einen Zeiger, array4[][7][8][9] ist ein Zeiger auf ein 3-dimensionales Array, kann man auch schreiben als (*array4)[7][8][9], wird so vielleicht deutlicher.
    Die oberste Dimension array4[] kannst du nicht größenmäßig bestimmen, diese Größe musst du explizit mit übergeben als zusätzlichen Parameter üblicherweise vom Typ size_t.



  • Danke 🙂

    Ihr habt mir sehr geholfen.


Anmelden zum Antworten