Übergabe von 2 dimensonalen Arrays



  • Entweder:

    void fuellen( int _nr[][4]) 
    { 
    }
    

    oder

    void fuellen( int(*_nr)[4]) 
    { 
    }
    

    MfG Spacelord



  • Nunja das ist meiner Meinung nach ziemlich undynamisch... Ich will ja villeicht mal das Array vergrößern dass muss ich alle Funktionen umschreiben.



  • Ja erstmal THX raff ich wohl...

    FireFlow schrieb:

    Achja: Du übergibst eigentlich NIE das Array an sich, sondern nur die Adresse des Arrays, das machst du ja auch in der Funktion mit dem eindimensionalen Array.

    }[/cpp]

    Also ist das jetzt egal ob dann * davor setze weil ichen Array dann nur als Zeige übergeben kann?????



  • Marlon schrieb:

    Ja erstmal THX raff ich wohl...

    FireFlow schrieb:

    Achja: Du übergibst eigentlich NIE das Array an sich, sondern nur die Adresse des Arrays, das machst du ja auch in der Funktion mit dem eindimensionalen Array.

    }[/cpp]

    Also ist das jetzt egal ob dann * davor setze weil ichen Array dann nur als Zeige übergeben kann?????

    Wo davor? Normalerweise macht so ein * mehr oder weniger schon ein Unterschied 😉



  • Bei meinem 1 dimensonalen war das ja

    void fuellen( int *_nr[][4])
    

    und bei dem neuen hab ich nu

    void fuellen( int _nr[][4]
    

    so geht das dann au.. nur bei

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    void fuellen( int *_nr[][4])
    {
    
         }
    
    int main(int argc, char *argv[])
    {
    int nr[4][4];
    fuellen(nr);
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    sagt der mir das daen Fehler dabei is.. wo ist den da der Unterschied?



  • FireFlow schrieb:

    Nunja das ist meiner Meinung nach ziemlich undynamisch... Ich will ja villeicht mal das Array vergrößern dass muss ich alle Funktionen umschreiben.

    Ist aber für Anfänger geeignet :p
    Und das was du da über nen Template löst kriegst du auch mit stinknormalen Konstanten hin....

    MfG Spacelord



  • Der Unterschied ist:

    int v[][4] = { ... }; // => ist ein 2-D-Array mit Elementen vom Typ int.
    int* v[][4] = { ... }; // => ist ein 2-D-Array mit Elementen vom Typ Zeiger auf int.
    

    Caipi



  • aber eine Frage hätte ich noch. Wieso muss da ne 4 mit angeben werden??? Im Buch steht da nix drüber...wieso nicht int v[][] oder int* v[][]????



  • Caipi schrieb:

    Der Unterschied ist:

    int v[][4] = { ... }; // => ist ein 2-D-Array mit Elementen vom Typ int.
    int* v[][4] = { ... }; // => ist ein 2-D-Array mit Elementen vom Typ Zeiger auf int.
    

    Caipi

    Die Wirkung is aber gleich. Das Arry befindet sich immer noch im Orginalprogramm..oder?



  • Marlon schrieb:

    aber eine Frage hätte ich noch. Wieso muss da ne 4 mit angeben werden??? Im Buch steht da nix drüber...wieso nicht int v[][] oder int* v[][]????

    Das hat was mit dem Datentyp zu tun. int (*v)[4] ist ein Zeiger auf ein int Array mit 4 Elementen.Das ist der Datentyp von v !Diese Information braucht der Compiler um korrekte Zeigerarithmetik bieten zu können. So berechnet der Compiler etwa aus v+1 ne Speicheradresse die der Startadresse von v + die Größe von 4 ints entspricht.Dafür ist die Größenangabe der zweiten Dimension nötig.

    MfG Spacelord


Anmelden zum Antworten