Zweidimensionales Array



  • char *blub = new char [10,11]



  • xfvxfgvfdxgf schrieb:

    char *blub = new char [10,11]

    Hübsch. Nur erstellt das kein mehrdimensionales Array sondern ein eindimensionales Array mit Platz für 11 chars.

    Du solltest dir mal die Bedeutung des Komma-Operators anschauen.



  • Wieso hat eigentlich (Standard) C++ nicht was zur Verfügung gestellt um dynamisch mehrdimensonale Array's zur erstellen ???



  • fanden sie halt lustig 😉 dafür gibs ja die stl



  • Freak_Coder schrieb:

    Wieso hat eigentlich (Standard) C++ nicht was zur Verfügung gestellt um dynamisch mehrdimensonale Array's zur erstellen ???

    Haben sie doch - nennt sich vector<vector<T> > (oder auch Doppelpointer).



  • CStoll schrieb:

    Haben sie doch - nennt sich vector<vector<T> > (oder auch Doppelpointer).

    Und wenn man nicht die stl benutzen will und lieber sowas hätte: T* la = new T[4][7];

    😃



  • Dann bleiben noch Doppelpointer:

    T** matrix = new T*[zeilen]
    for(int i=0;i<zeilen;++i) matrix[i]=new T[spalten];
    

    oder auch das hier:

    T** matrix = new T*[zeilen]
    matrix[0]=new T[zeilen*spalten];
    for(int i=1;i<zeilen;++i) matrix[i]=matrix[0]+spalten*i;
    


  • CStoll schrieb:

    Dann bleiben noch Doppelpointer:

    T** matrix = new T*[zeilen]
    for(int i=0;i<zeilen;++i) matrix[i]=new T[spalten];
    

    oder auch das hier:

    T** matrix = new T*[zeilen]
    matrix[0]=new T[zeilen*spalten];
    for(int i=1;i<zeilen;++i) matrix[i]=matrix[0]+spalten*i;
    

    Ja das weiß ich doch. Ich frage mich nur wieso man nicht so ein einfaches Konstrukt wie new[][] hat 😕



  • Freak_Coder schrieb:

    ch frage mich nur wieso man nicht so ein einfaches Konstrukt wie new[][] hat 😕

    Genau das hab ich mich ja auch gefragt.

    In Java ist es wunderbar:
    char array[][] = new char[6][5];



  • Freak_Coder schrieb:

    Ich frage mich nur wieso man nicht so ein einfaches Konstrukt wie new[][] hat 😕

    Das lässt sich sehr einfach beantworten. Es liegt in der Philosophie von C und seinen Arrays. Ein Array ist einfach ein zusammenhängender Speicherbereich, ohne irgendwelche Attribute (wie Größe) oder Funktionen. Array-Indizierung ist eine reine Compile-Zeit-Angelegenheit. int[4] ist einfach Startadresse + 4 * sizeof(int).

    Ein Ausdruck wie new[][] ist auch erlaubt, aber nur, wenn die zweite Dimension zur Compile-Zeit feststeht. Auch hier liegt das Array an einem Stück im Speicher und Indizierung ist auch einfach möglich.

    int (*pArr)[5] = new int[2][5];

    pArr[1][2] ist einfach Startadresse + 1 * sizeof(int[5]) + 2 * sizeof(int).

    Würde man nun mehrdimensionale Array unterstützen wollen, die in allen Dimensionen dynamisch sind, müsste Array-Indizierung aufeinmal eine Laufzeitoperation werden, da der Compiler ohne Kentnisse der Dimensionen natürlich keine Offsets berechnen kann.
    Das wäre weniger effizient und damit nicht in guter C-Tradition.


Anmelden zum Antworten