bonjour , voilà j'ai une fonction qui génére un tableau de caractères à 3 dimensions et je voudrai qu'elle me retourne le tableau comment dois déclarer le type de ma fonction ?.
Merci
Version imprimable
bonjour , voilà j'ai une fonction qui génére un tableau de caractères à 3 dimensions et je voudrai qu'elle me retourne le tableau comment dois déclarer le type de ma fonction ?.
Merci
Quelle que soit la dimension, si la fonction engendre un tableau, elle doit le faire de façon dynamique (malloc) et renvoyer l'adresse obtenue par malloc.
Le type de retour de la fonction est dépendant du détail de la création du tableau par le(s) malloc. Il faudrait donc avoir un idée du code que tu utilises pour cette création.
Code:
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 #include<stdio.h> char * tableau() { char tab[10][10][10]; int a,b,c; char d='a'; for(a=0;a<10;a++) { for(b=0;b<10;b++) { for(c=0;c<10;c++) { tab[a][b][c]=d; } } } return tab; } int main(void) { char tab[10][10][10]; int a,b,c; tab=tableau(); for(a=0;a<10;a++) { for(b=0;b<10;b++) { for(c=0;c<10;c++) { printf("%c",tab[a][b][c]); } } } }
Tu ne peux pas!Code:
1
2
3
4
5
6 char * tableau() { char tab[10][10][10]; ... return tab; }
Ton tableau est un tableau local à la fonction et sera DETRUIT en sortie de la fonction.
Tu DOIS le créer par un malloc pour qu'il "survive" à la sortie de la fonction.
alors comment dois je faire pour allouer un tableau à 3d
Code:
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 #include<stdio.h> int car(int ***tab) { int *** curtab = &*tab; int a=0,b=0,c=0; for(a=0;a<5;a++) { for(b=0;b<5;b++) { for(c=0;c<5;c++) { curtab[a][b][c]=1; } } } for(a=0;a<5;a++) { for(b=0;b<5;b++) { for(c=0;c<5;c++) { printf("%d ",curtab[a][b][c]); } } } printf("\n"); } int main() { int ***tab=NULL; int a,b,c; tab = (int***)malloc(sizeof(int)); for(a=0;a<5;a++) { tab[a]=(int **)malloc(sizeof(int)); for(b=0;b<5;b++) { tab[a][b]=(int*)malloc(sizeof(int)); } } if(tab==NULL){printf("non\n");} else {printf("oui\n");} car(tab); return 0; }
// le seul problème c'est la fonction
// aucune erreure et met oui pour le tableau allouer
Si la taille du tableau est connue à l'exécution, on peut faire quelque chose comme:
ThierryCode:
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
66
67
68
69
70
71
72
73
74
75
76
77
78 #include<stdio.h> #define X_SIZE 3 #define Y_SIZE 4 #define Z_SIZE 5 #define ARRAY_SIZE(a) ( sizeof (a) / sizeof *(a) ) struct Tableau3D { int data[X_SIZE][Y_SIZE][Z_SIZE]; size_t xsize; size_t ysize; size_t zsize; }; int init(struct Tableau3D *self) { int err = 0; if (self != NULL) { size_t i, j, k; self->xsize = ARRAY_SIZE(self->data); self->ysize = ARRAY_SIZE(self->data[0]); self->zsize = ARRAY_SIZE(self->data[0][0]); for (i = 0; i < self->xsize; i++) { for (j = 0; j < self->ysize; j++) { for (k = 0; k < self->zsize; k++) { self->data[i][j][k] = i * self->ysize * self->zsize + j * self->zsize + k; } } } } else { err = 1; } return err; } void display(struct Tableau3D *self) { if (self != NULL) { size_t i, j, k; for (i = 0; i < self->xsize; i++) { for (j = 0; j < self->ysize; j++) { for (k = 0; k < self->zsize; k++) { printf("%3d ", self->data[i][j][k]); } printf("\n"); } printf("\n\n"); } } } int main(void) { struct Tableau3D tab; init(&tab); display(&tab); return 0; }