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
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 int
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part typedef int (*typeFonc)(void);
Tu l'utilises ensuite comme cela:
Au final, dans une structure tu peux faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part typeFonc monPointeurSurFonction;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part (*fonc) (0);
Ca rend le code un peux plus chiant a lire donc je te le déconseille...
Code : Sélectionner tout - Visualiser dans une fenêtre à part fonc (0);
a++
Bon courage![]()
Juste un mot: on peut faire un typedef de fonction, sans pointeur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Partager