Mehrdimensionale arrays und Zugriff per Pointer
-
1. multi ist ein Pointer auf das erste Element des Arrys, in deinem Fall multi[0][0].
2. Um auf das Element zuzugreifen, auf das ein Pointer zeigt muss man ihn dereferenzieren.
3. Laut Pointerarithmethik bedeuteted multi + 3 den Pointer auf multi plus dreimal die größe des Datentyps( In dem Fall sizeof(int)) weiterzuschieben (arrayelemente liegen ja hintereinander im Speicher).
4. Weil man nicht auf multi, sondern auf multi+3 zugreifen will wird das in Klammern gesetzt.
5. Jetzt hat man einen Pointer auf multi[3][0].
mfg
Glamdring
-
Mist, Hume war schneller
-
danke. ich denke, wenn ich mir nun noch ein wenig literatur zu dem thema besorge, wird mir das ganze wohl noch um einiges klarer.
-
Betrachtet man nun das Array nun als "Zeiger auf das erste Element",
dann erhält man int(*)[5], also Zeiger auf ein int-Array mit fünf ElementenSollte es nicht int(*)[10] heißen?
Jede Zeile hat 10 Elemente.
Sollte es nicht auch in allen weiteren Beispielen 10 statt 5 heißen?
-
Damit fängst du dir eine eklige Bereichsüberschreitung, dass Array ist int[5][10], d.h. das letzt Element ist [4][9].
mfg
Glmadring
-
Ja und?
Es sind dennoch 10 Elemente
-
Bei einem Array int[4] gibt es int[0, 1, 2, 3] und nicht mehr, also würde int[4] voll ins leere hauen und undef. Verhalten erzeugen -> Viel Spaß
mfg
Glamdring
-
Bei einem Array int[4] gibt es int[0, 1, 2, 3] und nicht mehr, also würde int[4] voll ins leere hauen und undef. Verhalten erzeugen -> Viel Spaß
Ich glaub du checkst es nicht ganz.
int(*)[10]
Das hier ist ein Pointer auf 10 (!) ints.
Ich habe nie auf das Element 10 zugegriffen!
-
hmmmmmmmmm schrieb:
Betrachtet man nun das Array nun als "Zeiger auf das erste Element",
dann erhält man int(*)[5], also Zeiger auf ein int-Array mit fünf ElementenSollte es nicht int(*)[10] heißen?
Jede Zeile hat 10 Elemente.
Sollte es nicht auch in allen weiteren Beispielen 10 statt 5 heißen?Ups. Da hast du natürlich recht.
Ich korrigiere...
-
Ups. Da hast du natürlich recht.
Ich korrigiere...
Joa. Wollte net flamen sondern nur verhindern, dass irgendwer noch mehr verwirrt ist.