Mehrdimensionale Felder legt man dynamisch so an:
int * reserve_space_for_3dim_integer_matrix (int dim1, int dim2, int dim3)
{
int *startadresse;
startadresse= (int *) malloc( sizeof(int) * (dim1 * dim2 * dim3 + 4) );
startadresse[0]= 3; /* 3 Dimensionen */
startadresse[1]= dim1; /* Ausdehnung der 1. Dimension */
startadresse[2]= dim2; /* Ausdehnung der 2. Dimension */
startadresse[3]= dim3; /* Ausdehnung der 3. Dimension */
return startadresse;
}
void main (void)
{
int *zeiger_auf_3dimensionale_matrix; /* feld mit 3 dimensionen */
zeiger_auf_3dimensionale_matrix= reserve_space_for_3dim_integer_matrix(10,20,12);
if(!zeiger_auf_3dimensionale_matrix) { printf("zuwenig freier Speicher vorhanden !\n"); exit(0); }
matrix_werte_einlesen(zeiger_auf_3dimensionale_mat rix);
matrix_werte_eingeben_bzw_nachtraeglich_veraendern (zeiger_auf_3dimensionale_matrix);
matrix_manipulieren(zeiger_auf_3dimensionale_matri x);
matrix_werte_ausgeben(zeiger_auf_3dimensionale_mat rix);
matrix_in_einer_datei_sichern("C:\\DAT\\matrix.dat ",zeiger_auf_3dimensionale_matrix);
/* Speicherplatz, der dynamisch angefordert worden ist, wieder freigeben am Programmende */
free(zeiger_auf_3dimensionale_matrix);
}
Der Zugriff auf das x.te y.te z.te Element erfolgt so:
int return_element_of_3dimensional_array(int *array, int x, int y, int z)
{
return *(array + 1 + array[0] + ((array[2] + array[3]) * x + array[3] * y + z));
}
void main (void)
{
int a,b,c,*matrix;
matrix= reserve_space_for_3dim_integer_matrix(2,3,5);
if(!matrix) { printf("zuwenig freier Speicher vorhanden !\n"); exit(0); }
/* Ausgabe aller Elemente des Arrays (=der Matrix) */
for(a=0;a<matrix[1];a++)
for(b=0;b<matrix[2];b++)
for(c=0;c<matrix[3];c++)
printf("Das Element [%d][%d][%d] lautet: %d\n",a,b,c,return_element_of_3dimensional_array(m atrix,a,b,c));
}
Das Programm bzw. die Funktionen kann bzw. können selbstverständlich auch von 3 dimensionaler Behandlung eines Arrays auf die Behandlung allgemein n-dimensionaler Felder (also Arrays) umgeschrieben werden. Im Element 0 ... matrix[0] ... steht die Anzahl der Dimensionen. Danach folgen die Ausprägungen der Dimensionen.
Kikakater
|