Soyez le premier à donner votre avis sur cette source.
Snippet vu 8 873 fois - Téléchargée 22 fois
#include <stdio.h> #include <stdlib.h> #include <time.h> #define TAB_INT_LEN 150 #define MAX_GEN_VALUE 1000 /* Prototypes de fonctions */ void TriABulle(size_t *, size_t, void *); void Affiche(size_t *, size_t); /* Nouveau type de donnee : pointeur vers fonction (tres specifique a la fonction TriABulle() ) */ typedef void (*pFunc)(size_t *, size_t, void *); int main( void ) { /* Initialisation du generateur de temps */ srand((unsigned)time(NULL)); /* Creation d'un tableau */ size_t *pstTable = (int *)calloc(TAB_INT_LEN, sizeof(size_t)); /* Remplissage aleatoires des cases avec des valeurs de 0 a MAX_GEN_VALUE */ size_t i; for ( i=0; i<TAB_INT_LEN; i++ ) pstTable[i] = rand()%(MAX_GEN_VALUE+1); /* Affiche le resultat avant le tri */ Affiche(pstTable, TAB_INT_LEN); /* Creation pointeur de fonction et appel */ pFunc pFuncTri = &TriABulle; (*pFuncTri)(pstTable, TAB_INT_LEN, (void *)pFuncTri); /* Affiche le resultat apres le tri */ printf("\n\n"); Affiche(pstTable, TAB_INT_LEN); /* Libere le tableau alloue */ free(pstTable); return EXIT_SUCCESS; } /* Affiche les valeurs du tableau passe en param */ void Affiche(size_t *stBuff, size_t stBuffLen) { size_t i; for ( i=0; i<stBuffLen; i++ ) printf("%d ", stBuff[i]); } /* Execute un tri a bulle de facon recursive */ void TriABulle(size_t *piTable, size_t stTableLen, void *pvFunc) { /* On cast le param pvFunc en pointeur de fonction */ pFunc pTriABulle = (pFunc)pvFunc; /* On declarre iTemp qui recevra les valeurs temporaires */ size_t iTemp = 0; /* Parcours le tableau */ size_t i; size_t iT; for ( i=1; i<(stTableLen); i++ ) { iT = i - 1; if ( piTable[iT] > piTable[i] ) { iTemp = piTable[iT]; piTable[iT] = piTable[i]; piTable[i] = iTemp; (*pTriABulle)(piTable, stTableLen, pvFunc); } } }
24 sept. 2007 à 23:28
10 août 2007 à 09:34
7 juin 2007 à 23:54
@++
7 juin 2007 à 13:00
ce ne sont pas des pointeurs de fonctions mais bel et bien des pointeurs de pointeurs de fonctions que tu utilises !!
int mafonction () {
return 5;
}
int main() {
int (*func)() = mafonction;
int k = func();
int (**pfunc)() = &func;
int kk = (*pfunc)();
printf(" %d %d ",k,kk);
}
attention : void *ptr = mafonction;
ou void *ptr = &mafonction;
auront le même résultat
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.