1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include<stdio.h>
#include<stdlib.h>
void a(int ***r, size_t n){
unsigned int i,j,k;
for(i=0U; i<n; ++i){
for(j=0U; j<n; ++j){
for(k=0U; k<n; ++k) printf("%d ",r[i][j][k]);
printf("\n");
}
printf("\n\n");
}
}
void cc(int ****r, size_t n){
unsigned int i,j,k;
*r = malloc(n * sizeof(int **));
for(i=0U; i<n; ++i){
(*r)[i] = malloc(n *size(int *));
for(j=0U; j<n; ++j){
(*r)[i][j] = malloc(n * sizeof(int));
for(k=0U; k<n; ++k)
(*r)[i][j][k] = i*n*n+j*n+k;
}
}
}
void cl(int ****r, size_t n){
unsigned int i,j;
for(i=0U; i<n; ++i){
for(j=0U; j<n; ++j) free((*r)[i][j]);
free((*r)[i]);
}
free((*r));
*r = NULL;
}
void * c2(void *c) { return *(int ***)c; }
void * c1(void *c) { return *(int **)c; }
void p(void *c, size_t s, unsigned int l){
static size_t ts[] = { sizeof(int), sizeof(int*), sizeof(int**)};
static void * (*tf[])(void *) = {&c1, &c2};
unsigned int i,j;
for(i=0U; i<s/2U; ++i){
for(j=0U; j<ts[l]; ++j){
char tmp;
tmp = *((char *)c+i*ts[l]+j);
*((char *)c+i*ts[l]+j) = *((char *)c+(s-1-i)*ts[l]+j);
*((char *)c+(s-1-i)*ts[l]+j) = tmp;
}
}
if(l!=0U)
for(i=0U; i<s; ++i, c=(void *)(((char *)c)+ts[l]))
p( (*(tf[l-1U]))(c), s, l-1U);
}
void pA(int ***m, size_t s){ p(m,s,2U); }
int main(void){
int ***m; cc(&m,3); a(m,3); pA(m,3); cl(&m,3);
return EXIT_SUCCESS;
} |
Partager