2 dimesionales int-array an funktion weitergeben.



  • hi,
    ansich sollte es ja wohl kein problem sein ein 2-dimensionales int-array an eine funktion zu übergeben. aber antscheinend bin ich dazu einfach zu blöd.
    weiss jemand wies geht?

    void funktion (desarray) 
    {
       benutzen des arrays;
    }
    void main(void)
    {
       int array[5][5];
       funktion(array);
       return true;
    }
    


  • Du mußt bei der Funktion auch angeben, wie groß das übergebene Array sein soll (die äußerste Dimension kann variabel sein, aber die inneren müssen zur Compilezeit feststehen):

    void funktion (int desarray[5][])
    {
      ...
    }
    

    (falls dir das nicht ausreicht, schau mal in der FAQ unter "dynamische mehrdimensionale Arrays")



  • mit nem dynamischen 2D- Array:

    //ARRAY 
        #define SIZE 20 
    
       int **ppArray  = new int*[SIZE]; 
        for(int i=0; i< SIZE; i++) 
            ppArray[i] = new int[SIZE]; 
    
    //FUNKTION (Zugriff über Pointer-Pointer) 
        funktion(ppArray); 
    
        void funktion(int **pArray){ 
    
            int wert= pArray[0][0]; 
        }
    


  • also mit der faq fang ich gar nichts an.

    meine funktion ist jetzt so deklariert

    bool funktion(int& var1, int$ var2, int feld[9][], int var3)
    {
      blabla;
    }
    main ()
    {
    int array[9][9], var1, var2, var3;
    funktion(var1, var2, array, var3);
    return;
    }
    

    das gibt leider den compilerfehler:

    1. (beim funktionsheader)too many arguments to function bool weg(int&, int&, int)' 2\. (beim funktionsheader)declaration offeld' as multidimensional array must have bounds for all
    3. (diese wird beim aufruf der funktion in main gemeldet) invalid conversion from `int (*)[9]' to `int'

    dimensions except the first



  • Da mußt du natürlich auch noch zwei Werte als 'var1' und 'var2' mitgeben 😉



  • ja klar (hab ich im post vergessen) ist im programm allerdings drinn,
    also die fehlermeldungen stimmen
    //oben editiret!

    /edit hier
    und das mit den beiden ** tut auch nicht (hab ich schon mal probiert), da gibt der beim aufruf der funktion den fehler

    cannot convert `int (*)[9]' to `int**' for argument `3' to `bool weg(int&, int&, int**, int)'
    gibt es einen unterschied das array so zu definieren
    int array[9][9];
    zu deiner variante?



  • So, jetzt hast du mich ins Grübeln gebracht - war es doch der vorderste Wert, den du weglassen kannst?. Mehrdimensionale Arrays sind sowieso eine Angelegenheit für sich, das heißt da selltest du dich wirklich intensiver damit beschäftigen. Aber als Lösung solltest du die Mitteilung des Compilers beherzigen und 'int feld[9][9]' schreiben.

    PS: Ich hoffe, das $ ist nur ein Tipfehler 😉



  • jap isses

    juhuuuuuuuuuu es tuuuuuuuuuut
    Dankee!!



  • CStoll schrieb:

    So, jetzt hast du mich ins Grübeln gebracht - war es doch der vorderste Wert, den du weglassen kannst?.

    Ich weisz zwar nicht, wie es ist, aber es klingt viel logischer.

    int array[]
    Ein array das eine unbestimmte Anzahl eines bestimmten Typs (int) enthält.

    int array[][5]
    Ein array, das eine unbestimmte Anzahl eines bestimmten Typs (5 ints) enthält.

    int array[5][]
    Ein array, das eine bestimmte Anzahl (5) eines unbestimmten Typs (unbestimmte Anzahl von ints) enthält.

    Mag jetzt sein, dass es damit nichts zu tun hat, aber da sging mir halt durch den Kopf als ich deinen Post gelesen habe.

    EDIT: dass diese " bestimmt" und "unbestimmt" Ausdrücke relativ sinnfrei sein kann ist mir bewusst, ich weisz blosz nicht, wie ich es besser beschreiben soll.


Log in to reply