Mehrdimensionale Array an Funktion übergeben



  • Hallo!

    Wie kann ich eine mehrdimensionale Array an eine Funktion übergeben? Leider bekomme ich immer die selbe Fehlermeldung 😞 Warum klappt es nicht mit "*ACode[256]" oder "**ACode"?

    Viele Grüße
    pmw

    Versuch 1:

    void ErzeugeCodeTabelle(bool *ACode[256])
    {
    
    }
    
    int main()
    {
    
       bool ACode[256][256];
       ErzeugeCodeTabelle(ACode); /* Fehlermeldung */
    
    }
    

    cannot convert `bool (*)[256]' to `bool**' for argument `3'

    Versuch 2:

    void ErzeugeCodeTabelle(bool **ACode)
    {
    
    }
    
    int main()
    {
    
       bool ACode[256][256];
       ErzeugeCodeTabelle(ACode); /* Fehlermeldung */
    
    }
    

    cannot convert `bool (*)[256]' to `bool**' for argument `3'



  • Hallo,

    Da du die ausmaße deines Array kennst kannst du schreiben.

    void foo(bool p[256][256]){
     //tu was
    }
    
    bool test[256][256];
    
    foo(test);
    

    Du kannst aber auch mit nem einfachen Zeiger arbeiten und ihn auf 2 Dimensionen umrechnen. Dazu wurde schon öfter was gepostet.



  • Ich müsste schon mit Zeigern arbeiten, da "ACode" in der Funktion geändert wird. Abe leider habe ich weder mit der Forumsuche noch mit Google etwas gefunden 😞 Ich habe keine Ahnung was ich an die Funktion übergeben soll.



  • Ok,

    Also C behandelt mehrdimensionale Felder wie Eindimensionale.
    Die Elemente werden so abgelegt.

    Bsp:

    int a[5][6];

    a[3][5]=4;

    Bei dieser Zuweisung passiert folgendes.

    a[3*6+5]=4;

    Das geht deswegen weil die abbildung des arrays im Speicher so aussieht:

    a[0][0], a[0][1] ... a[0][6],a[1][0],a[1][1].....

    Du kannst also einen Zeiger übergeben.

    void foo(bool *arr){
      //auf arr[3][4] zugreifen
      arr[3*256+4]=true;
    }
    


  • http://www.c-plusplus.net/forum/viewtopic.php?t=74815
    http://www.c-plusplus.net/forum/viewtopic.php?t=74742

    benutzt doch einfach mal die Suche, das hier war sogar noch auf der ersten Seite ⚠



  • Hallo!

    Vielen Dank für die Erklärung prolog 🙂 Die habe ich im Gegensatz zu de Links sehr gut verstanden.

    Geht nicht, Warum?

    void ErzeugeCodeTabelle(bool *ACode)
    {
    
    }
    
    int main()
    {
    
       bool ACode[256][256];
       ErzeugeCodeTabelle(ACode); /* Fehlermeldung */
    
    }
    

    cannot convert `bool (*)[256]' to `bool**' for argument `3'

    Das hier geht aber, auch wenn es nicht ganz so schön aussieht:

    void ErzeugeCodeTabelle(bool *ACode)
    {
    
    }
    
    int main()
    {
    
       bool ACode[256*256];
       ErzeugeCodeTabelle(ACode); /* Fehlermeldung */
    
    }
    


  • Hallo,

    Naja es geht deswegen nicht weil bool t[256][256] eben ein zweidimensionales Array währen t[256*256] ein eindimensionales Array ist, was aber genauso verwendet werden kann wie ein eindimensionales. Die Funktion erwartet einen Zeiger auf bool bzw. in unserem Fall die Addresse an der das eindimensionale Array beginnt.

    Kurzum man übergibt den falschen Typ und das verursacht zu Recht den Fehler.

    Deine zweite Lösung ist ja gleichbedeutent mit der ersten.



  • // Das hier geht alles:
    void ErzeugeCodeTabelle(bool ACode[][256]);
    void ErzeugeCodeTabelle(bool ACode[256][256]);

    int main()
    {

    bool ACode[256][256];
    ErzeugeCodeTabelle(ACode);

    }


Anmelden zum Antworten