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: