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 :

pointeur de fonction


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut pointeur de fonction
    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

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Oui c'est possible:

    Pour la déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int (*fonction) (int, int);
    int* (*fonction2) (char*);
    fonction est un pointeur sur une fonction qui prend en paramètre deux int et qui retourne un int
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef          int (*typeFonc)(void);
    typeFonc est un pointeur de fonction qui ne prend aucun paramètre et retourne un int...
    Tu l'utilises ensuite comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typeFonc        monPointeurSurFonction;
    Au final, dans une structure tu peux faire:
    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:
    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); */
    }
    Et voilà !

    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 :
    Ca rend le code un peux plus chiant a lire donc je te le déconseille...

    a++

    Bon courage

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci

  4. #4
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    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....
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    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
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

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

Discussions similaires

  1. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2004, 09h13
  2. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  3. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  4. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  5. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17

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