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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut pointeur de fonction
    Bonjour a tous !!

    J'ai lu le cours en C (qui est d'ailleurs tres bien fait) proposé sur ce site. Mais je ne parviens pas à comprendre deux choses :

    - a quoi servent les pointeurs de fonctions ?? c'est plus interessant au niveau utilisation de la memoire ?

    - a quoi servent les classes template en C++ ?? L'exemple donné est pour les tableau de hachage mais j'ai du mal à le comprendre...

    Merci pour vos précisions !!

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Les pointeurs de fonctions peuvent servir à plusieures choses !

    Tu peux les utiliser pour par exemple appeler une fonction depuis une structure par exemple (comme le ferais une classe avec ses méthodes par exemple).

    L'utilisation la plus courante je pense, est la possibilité de pouvoir passer une fonction en paramètre d'une autre fonction, comme le fait par exemple la fonction g_signal_connect de la Glib pour attacher un évènement (callback) a un widget GTK+ !

    Tu peux aussi regarder du côté de la fonction qsort du C qui utilise le même principe pour faire appel a une fonction utilisateur !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    ah daccord.. les pointeurs de fonctions permettent entre autre de créer des fonctions de CallBack...

    Merci pour l'explication !!

    Pour les classes templates, tu aurais une idee ??

    Merci encore !

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par gdpasmini
    - a quoi servent les classes template en C++ ?? L'exemple donné est pour les tableau de hachage mais j'ai du mal à le comprendre...
    Question sur le C++ c'est à côté...

    Jc

  5. #5
    Membre expérimenté Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Par défaut
    Citation Envoyé par gdpasmini
    - a quoi servent les pointeurs de fonctions ?? c'est plus interessant au niveau utilisation de la memoire ?
    Rien à voir. Cela permet en fait d'utiliser une fonction comme une variable : un tableau de fonctions, fonctions de callback, etc.

    Exemple 1, une table de correspondance qui permet "d'aiguiller" un traitement selon certains paramètres :
    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
    int aiguillaturage(const char *truc)
    {
        struct { 
            const char *name; 
            int (*function)(int);
        } aiguillage[] = {
            { "tata", fonction_tata  },
            { "toto", fonction_toto  },
            { "titi", fonction_titi  },
            { "tutu", fonction_tutu  },
            { NULL, NULL }
        };
     
        for(unsigned i = 0; aiguillage[i].name; ++i)
        {
            if ( !strcmp(aiguillage[i].name, truc) )
                return aiguillage[i].function(i);
        }
    }

    Et pour l'exemple 2 j'allais citer qsort(), mais ça a déjà été fait.


    edit : correction d'une fonction void qui retourne un int

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    Merci beaucoup, j'ai tout compris !!

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    L'utilisation la plus courante je pense, est la possibilité de pouvoir passer une fonction en paramètre d'une autre fonction,
    Pas besoin de pointeur de fonction pour cela car "f" est équivalent à "&f":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void g(void){}
    void f(void g1(void)){g1();}
    ...
    f(g);

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par seriousme
    Pas besoin de pointeur de fonction pour cela car "f" est équivalent à "&f":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void g(void){}
    void f(void g1(void)){g1();}
    ...
    f(g);
    J'avoue... mais je ne donne que quelques exemples d'utilisation et non pas ce qui est mieux ou pas, possible ou pas !
    D'ailleurs j'ai pû remarquer qu'il est souvent d'usage d'utiliser un pointeur de fonction dans ce genre de cas, mais quelle différence !?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Franck.H
    D'ailleurs j'ai pû remarquer qu'il est souvent d'usage d'utiliser un pointeur de fonction dans ce genre de cas, mais quelle différence !?
    Aucune. seriousme utilise un pointeur de fonction sans le savoir. C'est juste une simplicite de syntaxe: ecrire f ou &f est la meme chose. C'est similaire a un tableau: ecrire le nom du tableau est equivalent a envoyer l'adresse de son premier element.

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

Discussions similaires

  1. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  2. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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