IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme de pointeur sur une fonction


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Résolu] Probleme de pointeur sur une fonction
    Voila mon problème :
    j'ai ce code qui marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int executer_tache (int f)
    {
           return f;
    }
     
    int main ()
    {
          int i;
          int (*pointeur)();
          pointeur = &executer_tache;
          i= (*pointeur) (10);
          printf ( "%d\n" , i );
    }
    maintenant j'aimerais créer une fonction à laquelle je passe en parametre mon pointeur de fonction et qui exécuterait la fonction pointée.
    je pense que la fonction doit se présenter ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void fonc (int (*pfonction()) , int variable )
    {
           (*pfonction)(variable);
    }
    mais maintenant dans le main, comment dois-je l'appeler ?

    fonc ( ?? , 10 ); :

  2. #2
    Membre régulier Avatar de kaisse
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Points : 117
    Points
    117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int executer_tache (int f) 
    { 
           return f; 
    } 
     
    int main () 
    { 
          int i; 
          int (*pointeur)(); 
          pointeur = &executer_tache; 
          i= (*pointeur) (10); 
          printf ( "%d\n" , i ); 
    }
    int (*pointeur)(int);

    Sinon ton pointeur pointe sur une fonction qui n'as pas d'arguments.

    pointeur = executer_tache;

    Contrairement aux variables, on n'a pas besoin de demander explicitement l'adresse d'une fonction, puisqu'on ne peut les manipuler que par pointeur. Du coup le & est inutile, et je ne sais même pas si c'est toléré syntaxiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void fonc (int (*pfonction()) , int variable ) 
    { 
           (*pfonction)(variable); 
    }
    Tu dis que fonction ne prend pas d'arguments, mais tu lui passes un int.
    De plus la déclaration est mauvaise.

    void fonc (int (*pfonction)(int), int variable)

    Voici le code corrigé

    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
    int executer_tache (int f) 
    { 
           return f; 
    } 
     
    int fonc (int (*pfonction)(int), int variable)
    {
        return   pfonction (variable); /* plus prudent de retourner le resultat */
    }
     
    int main ()
    {
          /* Première possibilité */
     
          int variable = 22; /* par exemple* /
     
          fonc (executer_tache, variable); /* conversion implicite */
     
           /* Deuxième possibilité */
     
          int (*pointeur) (int) = executer_tache;
     
          fonc (pointeur, variable);
     
          return 0;
    }
    Le plus propre est d'utiliser des typedef pour les fonctions. Va voir sur la page de Emmanuel c'est trés bien expliqué:

    http://emmanuel-delahaye.developpez.com

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci

    Ca marche bcp mieux comme ça


    Je vais regarder le lien pour les typedef

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/01/2011, 15h33
  2. Réponses: 5
    Dernier message: 29/06/2006, 17h23
  3. Réponses: 3
    Dernier message: 16/05/2006, 18h22
  4. Pointeur sur une fonction
    Par bogosse dans le forum C
    Réponses: 12
    Dernier message: 16/02/2006, 14h16
  5. Pointeur sur une fonction template
    Par Progs dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2006, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo