Je voudrais savoir si l'on peut mettre un pointeur de fonction ds une structure?
SI oui comment fait-on la declaration puis l'initialisation et enfin l'utilisation?
En resumé comment on s'en sert?
Merci
Version imprimable
Je voudrais savoir si l'on peut mettre un pointeur de fonction ds une structure?
SI oui comment fait-on la declaration puis l'initialisation et enfin l'utilisation?
En resumé comment on s'en sert?
Merci
Salut,
Oui c'est possible:
Pour la déclaration:
fonction est un pointeur sur une fonction qui prend en paramètre deux int et qui retourne un intCode:
1
2 int (*fonction) (int, int); int* (*fonction2) (char*);
fonction2 est un pointeur sur une fonction qui prend en paramètre un char* et qui retourne un int*
Pour simplifier tu peux utiliser un typedef:
typeFonc est un pointeur de fonction qui ne prend aucun paramètre et retourne un int...Code:typedef int (*typeFonc)(void);
Tu l'utilises ensuite comme cela:
Au final, dans une structure tu peux faire:Code:typeFonc monPointeurSurFonction;
Code:
1
2
3
4
5
6
7 typedef int (*fonction1)(int); struct maStruct { fonction1 maFonc1; /* ou bien directement: */ int (*maFonc2) (int); };
Et tu l'utilise comme ca:
Et voilà !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 int f1 (int c) { printf ("Appel de F1 avec %d\n", c); return 1; } int f2 (int c) { printf ("Appel de F2 avec %d\n", c); return 2; } int f3 (int c) { printf ("Appel de F3 avec %d\n", c); return 3; } main () { struct maStruct s; fonction1 func; s.maFonc1 = F1 ; /* Sans les parenthèses pour l'adresse de F1 */ s.maFonc2 = F2 ; func = F3; s.maFonc1 (0); /* Appel de F1(0); */ s.maFonc2 (0); /* Appel de F2(0); */ func (0); /* Appel de F3(0); */ }
Je te conseille d'utiliser des typedef au moins tu ne declares qu'une seule fois la fonction et ensuite tu utilises la définition. Le code est plus lisible...
Sinon tu peux également utilisés les pointeur de fonctions en faisant un truc du genre:
Cela revient exactement au même de faire :Code:(*fonc) (0);
Ca rend le code un peux plus chiant a lire donc je te le déconseille...Code:fonc (0);
a++
Bon courage ;)
merci
Juste un mot: on peut faire un typedef de fonction, sans pointeur:Code:
1
2
3
4
5
6
7 void fonc(int){} //fonction typedef void fonc_t(int); //type de la fonction fonc_t* pfonc= fonc; //pointeur de fonction fonc_t fonc2{}; //ah non, ça c'est pas possible....
oui mais comme on n'utilisera jamais de fonction dans le corps d'une autre fonction, autant declarer tout de suite un pointeur sur fonction :)