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 :

L'adresse d'un pointeur sur une fonction a l'interieur de celle ci


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut L'adresse d'un pointeur sur une fonction a l'interieur de celle ci
    Bonjour a vous tous, je voudrais savoir si il était possible de récuperer l'adresse d'un pointeur de cette fonction

    Je m'explique, je crée un pointeur dans mon main, et je veux l'adresse de ce pointeur, je veux donc essayer de récuperer l'adresse de ce pointeur dans la fonction, j'ai essayer ceci, mais cela me donne l'adresse de la fonction pas l'adresse :/

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    void foo(void);
     
    int main(int argc, char *argv[])
    {
        void(*p_foo)(void) = foo;
     
        printf("%p\n", &p_foo);/*Ceci affiche bien l'adresse du pointeur sur la fonction exemple 0x0c789f4*/
     
        (p_foo)();
     
        (void)argc, (void)argv;
        return 0;
    }
     
    void foo(void)
    {
        printf("%p", &(foo));/*Je veux donc que ceci fasse la même chose ^^ exemple 0x0c789f4*/
    }
    Mais je pense que ce n'est pas possible ^^.

    Cordialement Qnope

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Comment veux-tu qu'une fonction devine l'adresse d'une variable (p_foo)définie dans une autre fonction ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Je ne vois pas d'autres solutions que de passer cette fameuse adresse en argument, lors de l'appel à la fonction.

  4. #4
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Je ne vois pas d'autres solutions que de passer cette fameuse adresse en argument, lors de l'appel à la fonction.
    C'est clair ! mais quel est le type de cet argument ?

    un pointeur de pointeur de fonction prenant en argument un pointeur de pointeur de fonction prenant en argument un pointeur de pointeur de fonction prenant en argument ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void foo(void (**pf1)( void (**pf2)( void (**pf3)( void (*ppf4)(...) ) ) ) )


    J'avais pensé à quelque chose du genre:
    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
    #include  <stdio.h>
    #include  <stdlib.h>
     
    void foo(void (**ppf)())
    {
    	printf("inside foo()  = %p\n", (void*)ppf);
    }
     
    int main( void )
    {
    	void (*pf)() = foo;
     
    	printf("inside main() = %p\n", (void*)&pf);
    	pf(&pf);
     
    	return 0;
    }
    Mais ce n'est pas très correcte, puisque le compilateur ne peut pas vérifier les types et le nombre des arguments lors des appelles via les pointeurs de fonctions.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est clair ! mais quel est le type de cet argument ?

    un pointeur de pointeur de fonction prenant en argument un pointeur de pointeur de fonction prenant en argument un pointeur de pointeur de fonction prenant en argument ...
    héhé... je vois que je ne suis pas le seul à m'être heurté à ça. J'ai voulu tenter de résoudre cette énigme en codant un truc. Et j'ai clairement bloqué, à cause de la question du type de variable.

    Je ne sais pas s'il y a une solution à ce genre de problème... à moins de caster sauvagement.

    J'ai codé quelque chose qui ressemble à ton code, mais je crois que le compilateur m'a crié dessus. (un truc du style "incompatible pointer type")

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 209
    Par défaut
    Il semblerait donc que ce n'est pas possible ^^ merci d'avoir essayer de m'aider tout de même Cordialement Qnope

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/06/2006, 17h23
  2. Réponses: 3
    Dernier message: 16/05/2006, 18h22
  3. Pointeur sur une fonction
    Par bogosse dans le forum C
    Réponses: 12
    Dernier message: 16/02/2006, 14h16
  4. Pointeur sur une fonction template
    Par Progs dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2006, 20h25
  5. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26

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