Bytenummer einer Matrix
-
Aufgabe:
Geben Sie den für matrix[2][3] benötigten Speicherplatz in Bytes an, wenn der
Wert von sizeof(int) als 4 angenommen wird. An welcher Bytenummer beginnt das
Element matrix[i][j] relativ zum Beginn des Arrays?Lösung:
sizeof(int) x dim1 x dim2 = 24, Bytenummer = (i x dim2 + j) x sizeof(int). Dabei wird
dim1 nur zur Berechnung des Speicherplatzes gebraucht, aber nicht zur Adressbe-
rechnung, zu der jedoch alle weiteren Dimensionen benötigt werden.Hi, ich versuche gerade den zweiten Teil dieser Aufgabe nachzuvollziehen.
Die Lösung ist hier: Bytenummer = (i x dim2 + j) x sizeof(int).
Aber ist dim2 nicht j?
Könnte man es dann nicht auch so schreiben:
Bytenummer = (i x j + j) x sizeof(int)?
Aber dann wäre die Bytenummer doch größer als 24.
-
-
@theAnfänger77 sagte in Bytenummer einer Matrix:
Die Lösung ist hier: Bytenummer = (i x dim2 + j) x sizeof(int).
Aber ist dim2 nicht j?Wenn dem so wäre, dann wäre
matrix[1][0]
undmatrix[0][0]
auf dieselben Bytes abgebildet, denn (1×0+0) = (0×0+0).
-
@theAnfänger77: Wie berechnet sich denn "sizeof(int) x dim1 x dim2 = 24", also welche Werte haben hier
dim1
unddim2
?
Du kannst es dir auch als 2 dimensionale Tabelle aufschrieben, dann sollte dir klar werden, wie sich die "Bytenummer" berechnet.
-
Ich glaube so:
sizeof(int) x dim1 x dim2 = 4 x 3 x 2 = 24
Gehen dann die Bytenummern von 0 bis 5?
-
Nicht ganz, denn
dim1 = 2
unddim2 = 3
(rechts ist immer das innere Array - und dieses wird für die "Bytenummer"-Berechnung benötigt).Die internen Indizes gehen dann bei diesem Array von 0 bis 5 (
i * 3 + j
).
Aber die Bytenummern (Adressen) sind immer Vielfache des Datentyps (also* sizeof(int)
), d.h. gehen also in 4er Schritten von 0 bis 20.Hier noch ein englischer Artikel dazu: Multidimensional Arrays in C / C++
-
Wenn die Bytenummern in 4er Schritten von 0 bis 20 gehen dann habe ich hier nur 5 Bytenummern.
In der 2 dimensionalen Tabelle sind aber 6.
Und was bedeutet hier in der Aufgabenstellung "relativ zum Beginn das Arrays"?
-
Oder so wären es 6 Bytenummern:
- 0-4
- 4-8
- 8-12
- 12-16
- 16-20
- 20-24
-
@theAnfänger77 das array ist 2 * 3 * sizeof int bytes lang und der letzte integer beginnt bei arrayanfang + (1 * 3 + 2) * sizeof int bytes.
-
-
@theAnfänger77 sagte in Bytenummer einer Matrix:
Oder so wären es 6 Bytenummern:
- 0-4
- 4-8
- 8-12
- 12-16
- 16-20
- 20-24
Im normalen Sprachgebrauch heißt "bis" normalerweise "bis inklusive". Der Würfel kann 1- 6 würfeln. Nicht 1 bis 7.
Du verwendest hier halboffene Intervalle. Am besten schreibst du das dann auch so, also z.B.[0, 4[
oder[0, 4)
.
-
Danke für die Antworten