Je m'attaque à la compréhension d'un concept très peu utilisé en langage C mais j'aimerais comprendre quand meme donc si il y a des gens qui capte ce concept
Je vous lache un bout de code comme exemple
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
 
/**************************************************************
*                                                                                                                        *
*  ------------------------- list.h ------------------------  *
*                                                                                                                        *
**************************************************************/
 
#ifndef LIST_H
#define LIST_H
 
#include <stdlib.h>
 
/***************************************************************
*                                                                                                                         *
*  Définition de la structure pour les éléments de la liste  *
*                                                                                                                         *
***************************************************************/
 
typedef struct ListElmt_ {
 
void			   *donnee;
struct ListElmt_   *suivant;
 
} ListElmt;
 
/****************************************************************
*                                                                                                                          *
*  Définition d'une structure pour les listes chaînées                 *
*                                                                                                                          *
****************************************************************/
 
typedef struct List_ {
 
int				taille;
 
int				(*corresp)(const void *val1, 
							  const void *val2);
void			   (*detruire)(void *donnee);
 
ListElmt		   *tete;
ListElmt		   *queue;
 
} List;
 
/***************************************************************
*                                                                                                                         *
*  ----------------- Interface publique ---------------------  *
*                                                                                                                         *
***************************************************************/
 
void list_init(List *liste, void (*detruire)(void *donnee));
 
void list_destroy(List *liste);
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
79
80
81
82
 
/************************************************************
*                                                                                                                  *
*  ------------------------ list.c -----------------------  *
*                                                                                                                  *
************************************************************/
 
#include <stdlib.h>
#include <string.h>
 
#include "list.h"
 
/***********************************************************
*                                                                                                                 *
*  ---------------------- list_init ---------------------  *
*                                                                                                                 *
***********************************************************/
 
void list_init(List *liste, 
			   void (*detruire)(void *donnee)) {
 
/************************************************************
*                                                                                                                  *
*  Initialisation de la liste.                                                    *
*                                                                                                                  *
************************************************************/
 
liste->taille   = 0;
liste->detruire = detruire;
liste->tete	 = NULL;
liste->queue	= NULL;
 
return;
 
}
 
/*************************************************************
*                                                                                                                       *
*  ---------------------- list_destroy --------------------  *
*                                                                                                                       *
*************************************************************/
 
void list_destroy(List *liste) {
 
void			   *donnee;
 
/*************************************************************
*                                                                                                                       *
*  Suppression de chaque élément.                                                     *
*                                                                                                                       *
*************************************************************/
 
while (list_size(liste) > 0) {
 
   if (list_rem_next(liste, NULL, (void **)&donnee) == 0 && 
	   liste->detruire !=  NULL) {
 
	  /*****************************************************
          *                                                                                                     *
          *  Appel d'une fonction utilisateur pour libérer      *
          *  les données allouées dynamiquement.                         *
          *                                                                                                     *
          *****************************************************/
 
	  liste->detruire(donnee);
 
   }
 
}
 
/************************************************************
*                                                                                                                  *
*  Aucune opération n'est encore permise, mais on nettoie   *
*  la structure par précaution.                                                         *
*                                                                                                                  *
************************************************************/
 
memset(liste, 0, sizeof(List));
 
return;
 
}
Alors mon truc c'est que je sais pas du tout comment dans mon main je vais pouvoir utiliser les structures et les fonctions que j'ai mise (init et destroy) à cause de ces pointeurs de fonction.

Donc si quelqu'un y arrive ca m'interesse
Merci d'avance.