五维数组
#include <stdio.h>
#include <stdlib.h>
enum dim {A=2, B, C, D, E};
typedef int T;
T ***** Alloc5D(size_t m, size_t n, size_t p, size_t q, size_t r);
void Free5D(T *****array, size_t m, size_t n, size_t p, size_t q);
int main(void)
{
T *****array;
int a, b, c, d, e;
if((array = Alloc5D(A, B, C, D, E)) == NULL) {
printf("Allocate fali!\n");
return 0;
}
for(a = 0; a < A; a++)
for(b = 0; b < B; b++)
for(c = 0; c < C; c++)
for(d = 0; d < D; d++) {
for(e = 0; e < E; e++) {
array[a][b][c][d][e] = a+b+c+d+e;
printf("[%d,%d,%d,%d,%d]=%d ", a, b, c, d, e,
array[a][b][c][d][e]);
}
printf("\n");
}
Free5D(array, A, B, C, D);
return 0;
}
T ***** Alloc5D(size_t m, size_t n, size_t p, size_t q, size_t r)
{
T *****array = NULL;
size_t a, b, c, d;
if((array = malloc(m * sizeof *array)) == NULL) return NULL;
for(a = 0; a < m; a++) {
if((array[a] = malloc(n * sizeof *array[0])) == NULL) return NULL;
for(b = 0; b < n; b++) {
if((array[a][b] = malloc(p * sizeof *array[0][0])) == NULL) return NULL;
for(c = 0; c < p; c++) {
if((array[a][b][c] = malloc(q * sizeof *array[0][0][0])) == NULL)
return NULL;
for(d = 0; d < q; d++)
if((array[a][b][c][d] = malloc(r * sizeof *array[0][0][0][0])) == NULL)
return NULL;
}
}
}
return array;
}
void Free5D(T *****array, size_t m, size_t n, size_t p, size_t q)
{
size_t a, b, c, d;
if(array) {
for(a = 0; a < m; a++) {
for(b = 0; b < n; b++) {
for(c = 0; c < p; c++) {
for(d = 0; d < q; d++) {
if(array[a][b][c][d]) free(array[a][b][c][d]);
}
if(array[a][b][c]) free(array[a][b][c]);
}
if(array[a][b]) free(array[a][b]);
}
if(array[a]) free(array[a]);
}
free(array);
}
}
恐怖吧。