?
Ein Array (egal welche Dimension) ist in C immer ein zusammenhängender Speicherplatz.
Die Daten werden hintereinander im Speicher abgelegt, wobei der höchste Index am schnellsten wechselt.
int a[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int b1[2][6] = { { 0, 1, 2, 3, 4, 5 }, // 2 Zeilen, 6 Spalten
{ 6, 7, 8, 9, 10, 11 }};
int b2[3][4] = { { 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 10, 11 }};
int b3[6][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 }, { 10, 11 }};
int c[2][3][2] = { {{ 0, 1 }, { 2, 3 }, { 4, 5 }},
{{ 6, 7 }, { 8, 9 }, { 10, 11}} };
ergibt für jedes Array dasselbe Speicherbild.
Deine Funktion bekommt jetzt die Adresse vom ersten Element geliefert.
Wenn du bei der Definition der Funktion aber die Dimensionen mit angibst, ist deine Funktion sehr eingeschränkt, da sie nur für diese Art Arrays geht.
Aber du kannst den Index bei Mehrdimensionalen Arrays auch selber berechnen, wenn du die Anzahl der Zeilen und Spalten kennst.
Index = Zeile*Spalten + Spalte;
Wie du siehst, spielt die Anzahl der Zeilen für die Berechnung keine Rolle.
Darum kannst du den ersten Index bei der Definiton auch weglassen.
Das gibt dann z.B für eine universelle 2D-Ausgabe:
void matrix_print(int *matrix, int zeilen, int spalten)
{
int zeile, spalte;
for(zeile=0;zeile<zeilen;zeile++)
for(spalte=0;spalte<spalten;spalte++)
{
printf(" %3d", matrix[zeile*spalten + spalte]);
}
putchar('\n');
}
Aufruf mit:
matrix_print(&matrix1[0][0] , ZEILENZAHL1, SPALTENZAHL1);
matrix_print(&ergebnismatrix[0][0], ZEILENZAHL3, SPALTENZAHL3);