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.