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 :

Listes chaînées contenant des pointeurs sur fonctions


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Listes chaînées contenant des pointeurs sur fonctions
    Salut à tous,

    Je suis débutant en C, et je suis, comme beaucoup, dans une impasse !
    J'aimerais "mettre" des pointeurs sur fonctions dans une liste chainée
    Je vois à peu près comment s'utilise une liste chaînée (avec des nombres), même chose pour les pointeurs sur fonctions, mais je n'arrive pas à assembler les deux !

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    En fait, si tu sais déjà faire une liste chainée de nombres, tu dois comprendre un code comme celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct node_s
    {
       struct node_s *next;  /* pointeur sur noeud suivant */
       int data; /* donnees de ce noeur */
    }  node_t;
    Si tu sais manipuler des pointeurs de fonction (très rare pour un débutant en C), tu dois comprendre un code comme celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     /* nouveau type "pointeur de fonction qui prend un int en argument et qui retourne rien" */
     typedef void (*functionpointer) (int argument);
    Du coup, tu dois pouvoir assembler les deux :

    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
     
     
    typedef void (*functionpointer) (int argument);
     
    typedef struct node_s
    {
       struct node_s *next;
       functionpointer   pfunc;
    } node_t;
     
    void MaFonction (int arg)
    {
       printf ("%d", arg);
    }
     
    [...]
    node_t node;
    node.pfunc = MaFonction;

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, je vais essayer de me dépatouiller avec cet exemple

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 131
    Points : 33 072
    Points
    33 072
    Billets dans le blog
    4
    Par défaut
    N'hésite pas à proposer ton code actuel si tu échoues, parce qu'effectivement si tu connais les listes chaînées et les pointeurs de fonction, tu devrais savoir faire une liste chaînée de pointeur de fonction.

    Quel que soit l'élément que tu mets dans la liste (int, float, pointeur de fonction, pointeur de pointeur de struct, ...), le principe de la liste chaînée est le même, et l'utilisation de l'élément ne change pas non plus que par son nom.

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Août 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Apparemment j'ai bien ajouté mes différents pointeurs-sur-fonctions dans ma liste chaînée. Lorsque je l'affiche, j'ai des valeurs qui apparaissent à l'écran, au même nombre que les pointeurs-sur-fonctions que j'ai ajoutés.

    Le problème maintenant c'est d'activer celui que je veux.
    J'arrive à me "placer" dessus dans la liste mais pas à l'activer

    J'ai essayé d'utiliser la technique du passage de pointeur-de-fonctions en paramètre mais sans succès

    Si quelqu'un avait la solution ce serait génial.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    phi1981 t'a donné la solution :


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

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/03/2011, 10h19
  2. Map contenant des pointeurs sur des fonctions membres
    Par Bash01 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/05/2010, 16h06
  3. [JOGL] - equivalent des pointeurs sur fonction
    Par sir_gcc dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/01/2009, 21h26
  4. Transtypages sur des pointeurs de fonction
    Par gege2061 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 05/01/2007, 16h01
  5. Réponses: 12
    Dernier message: 30/06/2006, 17h46

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