pakdoltogel.net
Je me demande même si c'est possible... Mais sinon, tu peux très bien tester en 5 lignes de code comme j'ai fait: une fonction qui fait rien et un pointeur sur celle-ci, et tu vois que ça ne compile même pas 23/12/2005, 20h46 #5 Re: Pointeur sur fonction! Envoyé par CSoldier Ca n'a aucun sens. Qui irait déréférencer un pointeur de fonction? Je serais surpris que ce soit autorisé par le langage. C pointeur sur fonction publique d'état. Au fait pout définir les pointeurs de fonctions, je recommande fortement l'usage de typedef. 1 2 3 4 5 typedef void user_func_f & #40;const unsigned int command_index); <... > user_func_f * pf_user_func; sinon, le code devient rapidement illisible... Pas de Wi-Fi à la maison: CPL #6 Je me demande même si c'est possible... C'est aussi une question que je me pose 23/12/2005, 20h53 #7 Ok, merci Emmanuel, c'etait une simple question que je me posais c'est tout, pour le typedef, je pense pas le faire car c'etait juste pour une structure! 23/12/2005, 20h55 #8 Dommage, c'est très pratique. Tu le verras à l'usage... 23/12/2005, 21h05 #9 Envoyé par Emmanuel Delahaye Je te fait confiance, je vais donc opter pour ta soluce 23/12/2005, 22h14 #10 C'est ce qui est génial avec les fonctions plus ou moins standard du C: Ils utilisent les typedefs à outrance (off_t, time_t, etc) et ne les utilisent pas là où l'on en a le plus besoin: La fonction signal()!
Exemple 8: int *P; P = 0; Exemple 9: Soit p1 et p2 deux pointeurs sur int. #include < stdio. h> int x=5; int *p1, *p2; p2=&x; // Copie le contenu de p2 vers p1 // p1 pointe alors sur le même objet que p2. p1=p2; printf("*p1 =%d \n", *p1); printf("*p2 =%d \n", *p2); Pointeurs et les tableaux Lien entre le nom d'un tableau à 1 dimension et les pointeurs Les pointeurs et les tableaux sontconceptuellement très similaires en C Nom du tableau = adresse du premier élément du tableau. KooR.fr - Les pointeurs sur fonctions en C. En simplifiant, nous pouvons retenir que le nom d'un tableau est un pointeur constant sur le premier élément du tableau. Exemple 10: En déclarant un tableau A de type int et un pointeur P sur int, #include < stdio. h> int A[10]; // equivalente à P =&A[0]; P = A; Si P pointe sur une composante quelconque d'un tableau, alors P+1 pointe sur la composante suivante. Généralement P+i pointe sur la i-ième composant devant P. Exemple 11: int main(void){ int x, i=6; // Le pointeur P pointe sur A[0] (P =&A[0]) // x = A[1] x = *(P+1); // x = A[2] x = *(P+2); // x = A[i] x = *(P+i); Puisque le nom tableau est un pointeur constant sur le premier élément on peut écrire: Exemple 12: int main(void){ // x = A[0] x = A; x = *(A+1); x = *(A+2); x = *(A+i); Remarque!
Pointeur sur fonction! - C Programmation Algorithmique 2D-3D-Jeux Assembleur C C++ D Go Kotlin Objective C Pascal Perl Python Rust Swift Qt XML Autres 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 Sujet: C 23/12/2005, 19h44 #1 Pointeur sur fonction! Bonjour, juste pour m'enlever d'un doute, est-il possible de déclarer un pointeur constant sur une fonction? Si oui, cela se ferais comme ceci: void const & #40;* user_func) (const unsigned int command_index); ou comme ceci: void & #40;const * user_func) (const unsigned int command_index); Merci bien 23/12/2005, 20h25 #2 Membre éprouvé T'as testé? Programmation en C - Pointeur d'un pointeur - WayToLearnX. Parce que la réponse va être vite fait: aucune de ces deux méthodes ne fonctionne Nas' 23/12/2005, 20h39 #3 Envoyé par Nasky bin non, pas encore testé (peut pas pour le moment)! Et quelle est la soluce? car je pourrais pas tester avant 1 bonne semaine, le temps que je code mon programme de test et mes fonctions et tout 23/12/2005, 20h42 #4 Je ne sais pas ce qu'il faut faire.
Voici un petit mémo sur les pointeurs de fonction. Pour rappel, un pointeur est une variable qui contient une adresse mémoire d'une donnée. La donnée peut être un int, un float, un tableau, etc. Mais ça peut aussi être l'adresse d'une fonction. Mais qu'est ce que ça veut dire que l'adresse d'une fonction? C pointeur sur fonction publique. Lorsqu'on compile un programme, le code est en fait transformé en instructions machine que peut comprendre le processeur. Ce code est stocké sur le disque dur. Une fois qu'on exécute le programme, alors le code est copié dans la mémoire vive de la machine, et c'est seulement ensuite qu'il sera exécuté. Il est donc écrit dans la mémoire vive, dans le segment qu'on appelle segment text. Les instructions sont lues les unes à la suite des autres par défaut. Mais parfois il peut y avoir des instructions qui, explicitement, demandent au processeur de sauter à une case mémoire en particulier, notamment lors de l'appel de fonction (avec l'instruction call). C'est cette adresse (qu'on appelle point d'entrée ou Entry Point) qui contient, la première instruction de la fonction, qui est ce qu'on appelle l'adresse de la fonction.
Voici la solution: void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes); int heures = 0, minutes = 90; // On envoie l'adresse de heures et minutes decoupeMinutes(&heures, &minutes); // Cette fois, les valeurs ont été modifiées! printf("%d heures et%d minutes", heures, minutes); void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes) /* Attention à ne pas oublier de mettre une étoile devant le nom des pointeurs! Comme ça, vous pouvez modifier la valeur des variables, et non leur adresse! Vous ne voudriez pas diviser des adresses, n'est-ce pas? ;o) */ *pointeurHeures = *pointeurMinutes / 60; *pointeurMinutes = *pointeurMinutes% 60;} Résultat: 1 heures et 30 minutes Rien ne devrait vous surprendre dans ce code source. Toutefois, comme on n'est jamais trop prudent, voyons ce qui se passe dans le détail: Les variables heures et minutes sont créées dans le main. C pointeur sur fonction publique hospitalière. On envoie à la fonction decoupeMinutes l'adresse de heures et minutes. La fonction decoupeMinutes récupère ces adresses dans des pointeurs appelés pointeurHeures et pointeurMinutes.