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 :

tableau de pointeur de fonction


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut tableau de pointeur de fonction
    Bonjour,

    J'ai déclaré un tableau de 2 pointeurs sur fonction qui renvoient des entiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (*t[2]) (int, int);

    mais dans ce tableau je voudras y mettre la fonction 2 qui renvoie un long. Mais je n'arrive pas à faire le cast


    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
    #include <stdio.h>
    #include <stdlib.h>
     
    long fonction2 (int a, int b)
    {
       return a + b;
    }
     
    int fonction3 (int c, int d)
    {
       return c / d;
    }
     
    int main (void)
    {
       int a = 6;
       int b = 4;
       int d = 2;
     
       int (*p2) (int, int) = NULL;
       int (*p3) (int, int) = NULL;
     
       p2 = fonction2;
       p3 = fonction3;
     
       int (*t[2]) (int, int) = {p2, p3};
     
       printf ("Resultat 1  %d\n", p2 (a, b));
       printf ("Resultat 2 %d\n", p3 (p2(a, b), d));
     
       printf ("Resultat 1 %d\n", t[0] (a, b));
       printf ("Resultat 2 %d\n", t[1] (t[0] (a, b), d));
     
       return EXIT_SUCCESS;
    }

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par exhortae Voir le message
    J'ai déclaré un tableau de 2 pointeurs sur fonction qui renvoient des entiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (*t[2]) (int, int);
    mais dans ce tableau je voudras y mettre la fonction 2 qui renvoie un long. Mais je n'arrive pas à faire le cast
    C'est pas très logique de définir un profil de fonction de de ne pas s'y tenir... Le comportement dépend de l'implémentation. Attention, en IA64 et autres architectures modernes, il risque d'y avoir des surprise si on se permet ce genre de bêtises...

    Si tu y tiens, je conseille d'alléger le codage à coup de typedef, particulièrement efficace avec les pointeurs de fonctions :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef int i_f (int, int);
    typedef long l_f (int, int);
     
    long fonction2 (int a, int b)
    {
       return a + b;
    }
     
    int fonction3 (int c, int d)
    {
       return c / d;
    }
     
    int main (void)
    {
       int a = 6;
       int b = 4;
       int d = 2;
     
       i_f *p2 = NULL;
       i_f *p3 = NULL;
     
       p2 = (i_f *) fonction2;
       p3 = fonction3;
     
       i_f *t[2] = { p2, p3 };
     
       printf ("Resultat 1  %d\n", p2 (a, b));
       printf ("Resultat 2 %d\n", p3 (p2 (a, b), d));
     
       printf ("Resultat 1 %d\n", t[0] (a, b));
       printf ("Resultat 2 %d\n", t[1] (t[0] (a, b), d));
     
       return EXIT_SUCCESS;
    }
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est pas très logique de définir un profil de fonction de de ne pas s'y tenir... Le comportement dépend de l'implémentation. Attention, en IA64 et autres architectures modernes, il risque d'y avoir des surprise si on se permet ce genre de bêtises...

    Si tu y tiens, je conseille d'alléger le codage à coup de typedef, particulièrement efficace avec les pointeurs de fonctions :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef int i_f (int, int);
    typedef long l_f (int, int);
     
    long fonction2 (int a, int b)
    {
       return a + b;
    }
     
    int fonction3 (int c, int d)
    {
       return c / d;
    }
     
    int main (void)
    {
       int a = 6;
       int b = 4;
       int d = 2;
     
       i_f *p2 = NULL;
       i_f *p3 = NULL;
     
       p2 = (i_f *) fonction2;
       p3 = fonction3;
     
       i_f *t[2] = { p2, p3 };
     
       printf ("Resultat 1  %d\n", p2 (a, b));
       printf ("Resultat 2 %d\n", p3 (p2 (a, b), d));
     
       printf ("Resultat 1 %d\n", t[0] (a, b));
       printf ("Resultat 2 %d\n", t[1] (t[0] (a, b), d));
     
       return EXIT_SUCCESS;
    }
    J'y tiens pas vraiment, c'est juste pour un exercice

    Par contre excellent le coup du typedef, merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/09/2011, 14h26
  2. [BCB6]Tableau de pointeurs sur fonctions
    Par rtg57 dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/10/2006, 20h49
  3. Tableau de pointeur de fonction
    Par Gryzzly dans le forum C
    Réponses: 7
    Dernier message: 31/12/2005, 10h47
  4. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

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