Salut,

j'aurais besoin d'aide pour comprendre ce que fait ce programme et en particulier les fonctions cc et p
J'ai essayé en utilisant un dessin mais je n'arrive pas à trouver.
Si quelqu'un pouvait m'aider.
Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}