Bonsoir a vous,
comment puis je utiliser ces fonctions avec des entiers?:oops:
Le main ressemblera a quoi...Code:
1
2
3 void *File_get (File ** pp_File); void File_post (File ** pp_File, void *data);
Merci pour votre aide
Version imprimable
Bonsoir a vous,
comment puis je utiliser ces fonctions avec des entiers?:oops:
Le main ressemblera a quoi...Code:
1
2
3 void *File_get (File ** pp_File); void File_post (File ** pp_File, void *data);
Merci pour votre aide
En fait, ça passe par des casts, par contre une chose, le mieux, c'est que tu passes un champ supplémentaire pour indiquer la taille du type.
Un exemple de parcours de tableau :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void parcours( void * pvdata , size_t nb_elt , size_t size , void (*fct)(const void*)) { size_t i; char *data = pvdata; for( i = 0 ; i < nb_elt ; ++i ) { fct(data+i*size); } } int main( void ) { int tabi[5] = {1,2,3,4,5}; double tabd[5] = {1.23,2.34,3.45,4.56,5.67}; parcours(tabi, sizeof(tabi)/sizeof(*tabi), sizeof(*tabi), affi); parcours(tabd, sizeof(tabd)/sizeof(*tabd), sizeof(*tabd), affd); return EXIT_SUCCESS; }
Si il s'agit d'une liste chainée, l'adresse suffit, donc :Code:
1
2
3 void *File_get (File ** pp_File); void File_post (File ** pp_File, void *data);
Par exemple avec des chaines littérales :
Si c'est une structure :Code:
1
2
3
4
5
6
7
8
9
10
11
12 File *f; File_post (&f, "Hello"); File_post (&f, "World"); char *s; s = File_get(&f); puts(s); s = File_get(&f); puts(s);
NON TESTECode:
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 struct data { int x; char s[12]; }; File *f; struct data *p; p = malloc(sizeof *p); if (p != NULL) p->x = 1; strcpy(p->s, "Hello"); File_post (&f, p); } p = malloc(sizeof *p); if (p != NULL) p->x = 2; strcpy(p->s, "World"); File_post (&f, p); } struct data *p; p = File_get(&f); if (p != NULL) { printf("%d:%s\n", p->x, p->s); free (p), p = NULL; } if (p != NULL) { printf("%d:%s\n", p->x, p->s); free (p), p = NULL; }