sizeof() bei mehrdimensionalen Arrays
-
Hallo!
Wenn meine Frage schon mal Gegenstand einer Frage war, dann sorry - aber ich habe lange hier und bei google gesucht und bin nicht fündig geworden...
Bei einem mehrdimensionalen Array (z.b. 2-dimensional), wie lese ich die Werte am Besten anhand des sizeof()-Operators innerhalb einer for-Schleife aus?
Stehe fürchterlich am Schlauch, deshalb dieser Post hier.
// Array deklarieren int a_var[2][4] = { {10, 20}, {30, 40, 50, 60} }; // funktioniert leider nicht... for(int i=0; sizeof(a_var[i][0]; i++) { for(int j=0; sizeof(a_var[0][j]; j++) { ... ... } }
Danke,
Tom.
-
1. Da fehlt jeweils eine schließende Klammer.
2. Damit baust du dir eine Endlosschleife.
-
sorry, die Klammer habe ich vergessen.
In meinem Code ist die allerdings drinnen, die Schleife wird auch durchlaufen.Allerdings werden nicht nur die korrekten Werte des Arrays ausgegeben, sondern auch andere Speicherbereiche...
-
Du machst da völligen Quark.
Dieser Quark ist so fest und rahmig, dass man ihn lieber wegschüttet und neuen macht.int a_var[2][4] = { {10, 20}, {30, 40, 50, 60} }; for(int i=0; i < sizeof(a_var) / sizeof(a_var[0]); i++) { for(int j=0; j < sizeof(a_var[0]); j++) { ... ... } }
oder
const int n = 2, m = 4; int a_var[n][m] = { {10, 20}, {30, 40, 50, 60} }; for(int i=0; i < n; i++) { for(int j=0; j < m; j++) { ... ... } }
-
Die Übergabe, wie du es machst, habe ich auch schon gemacht.
Das funktioniert auch soweit, sogut.Allerdings möchte ich folgenden Fall wissen:
Wenn ich nicht weiss, wie gross ist dieses mehrdimensionale Array, wie lese ich das aus?Auslesen möchte ich das Array mit sizeof().
Nicht die Werte hardcoded übergeben...
-
Hallo
Die Anzahl der Elemente von Arrays bekommst du mit sizeof nur bei statischen Arrays raus, deren Größe bereits beim Kompilieren feststeht.
Für alles andere brauchst du die Größe in einer extra Variablen (ob nun const oder nicht) oder gleich std::vector.bis bald
akari
-
thomas_m schrieb:
Die Übergabe, wie du es machst, habe ich auch schon gemacht.
Das funktioniert auch soweit, sogut.Allerdings möchte ich folgenden Fall wissen:
Wenn ich nicht weiss, wie gross ist dieses mehrdimensionale Array, wie lese ich das aus?Auslesen möchte ich das Array mit sizeof().
Nicht die Werte hardcoded übergeben...C++ kennt keine mehrdimensionalen Arrays, nur Arrays aus Arrays. Ein Array
int a[x][y][z];
ist also ein Array mit x Elementen, jedes Element ist selbst ein Array des Typs
int[y][z]
Die Anzahl der Elemente eines Arrays erhalten wir mittels sizeof einfach als Verhältnis der Gesamtgröße des Arrays zur Größe eines Einzelnen Elementes.
Also:int x = sizeof a / sizeof a[0];
Die Frage nach der Größe der "2. Dimension" y ist dann ganz einfach zu beantworten, indem wir dieses Schema nicht auf a (unser "3-dimensionales" Array) sondern auf a[0] (unser "2-dimensionales" Unterarray) anwenden. also:
int y = sizeof (a[0]) / sizeof (a[0])[0]
usw. das ganze für weitere Dimensionen. statt a[0] kann man auch *a schreiben (da a[0] ja nichts anderes ist als *(a+0) ) - bei dieser Art von Idiom kann das besser lesbar sein. mithin:
int x = sizeof a / sizeof *a; int y = sizeof *a / sizeof **a; int z = sizeof **a / sizeof ***a;
-
das hier
int y = sizeof (a[0]) / sizeof (a[0])[0]
und das
int x = sizeof a / sizeof *a; int y = sizeof *a / sizeof **a; int z = sizeof **a / sizeof ***a;
wollte ich wissen, jetzt passt es...
Vielen Dank,
Tom.