#include #include #include #include int X_DIM=16; int Y_DIM=8; int Z_DIM=4; int main(void) { char ***space; char ***Arr3D; int x, y, z; ptrdiff_t diff; /* first we set aside space for the array itself */ space = malloc(X_DIM * Y_DIM * Z_DIM * sizeof(char)); /* next we allocate space of an array of pointers, each to eventually point to the first element of a 2 dimensional array of pointers to pointers */ Arr3D = malloc(Z_DIM * sizeof(char **)); /* and for each of these we assign a pointer to a newly allocated array of pointers to a row */ for(z = 0; z < Z_DIM; z++) { Arr3D[z] = malloc(Y_DIM * sizeof(char *)); /* and for each space in this array we put a pointer to the first element of each row in the array space originally allocated */ for(y = 0; y < Y_DIM; y++) { Arr3D[z][y] = ((char *)space + (z*(X_DIM * Y_DIM) + y*X_DIM)); } } /* And, now we check each address in our 3D array to see if the indexing of the Arr3d pointer leads through in a continuous manner */ for(z = 0; z < Z_DIM; z++) { printf("Location of array %d is %p\n", z, *Arr3D[z]); for( y = 0; y < Y_DIM; y++) { printf(" Array %d and Row %d starts at %p", z, y, Arr3D[z][y]); diff = Arr3D[z][y] - (char *)space; printf(" diff = %d ",diff); printf(" z = %d y = %d\n", z, y); } getch(); } return 0; } .