C-Programmierung

Speicherbild einer Matrix

●

Jedes mehrdimensionale Array wird auf ein eindimensionales Array abgebildet, um es im linearen Speicher ablegen zu können.

Zum Beispiel erfolgt die Abbildung der Elemente einer zweidimensionalen Matrix a mit n Spalten und m Zeilen

int a[m][n];

auf ein eindimensionales Array b mit n*m Elementen

int b[n*m];

mit der Zuordnung

b[i+j*n] = a[j][i];

Die zweidimensionale Indizierung a[j][i] entspricht der eindimensionalen Indizierung b[i+j*n].
Die lineare Abbildung einer Matrix erfolgt zeilenweise (nicht spaltenweise).

Das Speicherbild der beiden Arrays a und b ist identisch.

Beispiel:

int a[3][4];
int b[12];

for (int i=0; i<4; i++)
   for (int j=0; i<3; j++)
      b[i+j*4] = a[j][i];
b[]01234567891011
 a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]
a[][]0123
0b[0]b[1]b[2]b[3]
1b[4]b[5]b[6]b[7]
2b[8]b[9]b[10]b[11]


●

Options: