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
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 : 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 #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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 #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:
Thierry
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
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; }
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Partager