#include <stdio.h>
#include <stdlib.h>
#define L3 3
#define L512 512
#define M512 512
#define N3 3
#define N512 512
#define A 1
#define B 2
#define C 3
#define MAGIC1 'A'
#define MAGIC2 'Z'
int mallocarray(char ****b, int x, int y, int z) {
int n, s;
int i, j;
n = 0;
*b = malloc(s = sizeof(char *) * x);
n += s;
for (i = 0; i < x; i++) {
(*b)[i] = malloc(s = sizeof(char *) * y);
n += s;
for (j = 0; j < y; j++) {
(*b)[i][j] = malloc(z);
n += z;
}
}
return n;
}
void freearray(char ****b, int x, int y) {
int i, j;
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
free((*b)[i][j]);
}
free((*b)[i]);
}
free(*b);
}
void f1(char a[][M512][N512], int x, int y, int z) {
printf("magic1: %c\n", a[x][y][z]);
a[x][y][z] = MAGIC2;
}
void f2(char ***b, int x, int y, int z) {
printf("magic1: %c\n", b[x][y][z]);
b[x][y][z] = MAGIC2;
}
int main() {
char a1[L3][M512][N512];
char a2[L512][M512][N3];
char ***b1;
char ***b2;
int n;
printf("sizeof(char): %d, sizeof(char *): %d\n", sizeof(char), sizeof(char *));
printf("A4: %d\n", sizeof(a1));
printf("A5: %d\n", sizeof(a2));
n = mallocarray(&b1, L3, M512, N512);
printf("B4: %d\n", n);
n = mallocarray(&b2, L512, M512, N3);
printf("B4: %d\n", n);
a1[A][B][C] = MAGIC1;
f1(a1, A, B, C);
printf("magic2: %c\n", a1[A][B][C]);
b1[A][B][C] = MAGIC1;
f2(b1, A, B, C);
printf("magic2: %c\n", b1[A][B][C]);
freearray(&b1, L3, M512);
freearray(&b2, L512, M512);
return 0;
}
/* end */