13.11 Übergabe von zwei- bzw. mehrdimensionalen Arrays an Funktionen
Unschön an den vorangegangenen Beispielen mit den zweidimensionalen Arrays war, dass der Speicher immer global definiert wurde. Allerdings ist es auch hier immer ein wenig verwirrend, wenn man ein zweidimensionales Array an eine Funktion übergeben will – da ein zweidimensionales Array (oder auch Array auf Array) auf einem Zeiger auf Arrays zerfällt – und nicht wie man vielleicht vermuten würde zu einem Zeiger auf einem Zeiger!
Wollen Sie also ein zweidimensionales Array wie folgt an eine Funktion übergeben:
int val[ZEILE][SPALTE];
function(val);
dann sollte die Funktion wie folgt aussehen:
/* 1. Möglichkeit :
* Automatische Umsetzung, wird vom Compiler vorgenommen
*/
void function( int feld[][SPALTE] ) {
...
}
// ODER :
/* 2. Möglichkeit:
* Explizite Umsetzung
*/
void function( int (*ptr)[SPALTE] ) {
/* ptr ist ein Zeiger auf das Array der Länge SPALTE */
...
}
Da eine aufgerufene Funktion keinen Speicher für ein Array bereitstellt, muss die gesamte Größe des Arrays (erste Dimension) nicht angegeben werden – weshalb hier die (Dimension) Zeile weggefallen ist. Allerdings müssen die weiteren Dimensionen (zweite, dritte, etc.), wie im Beispiel mit SPALTE, immer mit angegeben werden.
Hierzu wieder ein einfaches Beispiel, welches demonstriert, wie Sie ein zweidimensionales Array an eine Funktion übergeben können.
/* md_array3.c */
#include <stdio.h>
#include <stdlib.h>
#define DIM1 5
#define DIM2 5
void function(int feld[][DIM2], int dim1) {
int i, j;
for(i = 0; i < dim1; i++) {
for(j = 0; j < DIM2; j++) {
printf("%d; ", feld[i][j]);
}
printf("\n");
}
printf("\n");
}
int main(void) {
int val[DIM1][DIM2];
int i, j;
for(i = 0; i < DIM1; i++)
for(j = 0; j < DIM2; j++)
val[i][j] = i+j;
function(val, DIM1);
return EXIT_SUCCESS;
}
|