begin process at 2012 05 28 04:52:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

abération pointeurs de fonction ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

abération pointeurs de fonction ?

vendredi 8 juin 2007 à 23:39:28 | abération pointeurs de fonction ?

acx01b

bonjour,

quelqu'un pourrait m'expliquer ce que signifie ce code pour nos compilateurs ?

int mafonction () {
return 54;
}

int main() {
   int (*func)() = mafonction;
   int k = (************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************func)();
   printf(" %d\n",k);
}

(chez moi ça affiche 54 sans problème)


samedi 9 juin 2007 à 08:22:30 | Re : abération pointeurs de fonction ?

vicenzo

Membre Club
Je pense que ton code devait plutôt être ca :

int mafonction()
{
    return 54;
}

int main()
{
 // déclaration d'un pointeur sur une fonction de signature égale à celle de mafonction

   int (*func)() = mafonction;

  // exécution de la fonction via le pointeur de fonction
   int k = (*func)();

   printf(" %d\n",k);
}

samedi 9 juin 2007 à 08:39:05 | Re : abération pointeurs de fonction ?

coucou747

Administrateur CodeS-SourceS
Salut

dans ce cas, c'est equivalent a

k=mafonction();

en gtk, en C/Xchat, et autre, ca sert pour les callbacks.

La derniere fois que j'ai fait ca, j'avais un perso a faire bouger, et une fonction appellee a chaque tour,
cette fonction pouvait appeller 5 autres fonctions, selon que le perso soit gentil, phagocyteur, anticorps, visiteur etc..

certains se servent de l'heritage pour ne pas avoir a manipuler ces pointeurs


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
samedi 9 juin 2007 à 10:47:21 | Re : abération pointeurs de fonction ?

acx01b

salut

vous n'avez peut-être pas compris ma question

vicenzo: une fonction c'est déja une adresse il faut donc faire

int mafonction()
{
    return 54;
}

int main()
{
   int (*func)() = mafonction;
   int k = func();
   printf(" %d\n",k);
}


mais qu'en est-il des étoiles dans mon code ?
samedi 9 juin 2007 à 10:52:20 | Re : abération pointeurs de fonction ?

coucou747

Administrateur CodeS-SourceS
Salut

a part si tu t'es endormi sur le clavier, et que le lendemain, par erreur tu ai enregistre... je ne vois pas d'ou peuvent vennir ces etoiles....

je ne connais aucun humain capable de taper un truc qui renverrait un pointeur sur pointeur (sur pointeur ) {1500} de fonction...


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
samedi 9 juin 2007 à 13:00:25 | Re : abération pointeurs de fonction ?

luhtor

D'ailleurs a ce sujet, j'avais poster une fois, car le code suivant marche également:

   int (*func)() = &mafonction;
   int k = func();
samedi 9 juin 2007 à 14:19:14 | Re : abération pointeurs de fonction ?

acx01b

ça c'est normal luhtor

c'est l'idée qu'une fonction est à la fois l'adresse du prologue de la fonction, et à la fois l'entité "fonctionnelle" (sizeof mafonction = 1 tout comme sizeof(void) !!!)
l'adresse de l'entité fonctionnelle étant l'adresse du prologue....

de la même manière

int tab[15];
( tab == &tab ) est Vrai
samedi 9 juin 2007 à 15:07:27 | Re : abération pointeurs de fonction ?

luhtor

Hm j'ai eu peur. J'ai cru que ton exemple allait compiler.

   int tab[15];
   if (tab == &tab)

Provoque une erreur de compilation et heureusement puisque les types sont différents.
samedi 9 juin 2007 à 17:47:14 | Re : abération pointeurs de fonction ?

acx01b

l'idée est que c'est un code C et pas un code C++ :)

chez moi ça fonctionne (avec gcc, mingw, vc++)
dimanche 10 juin 2007 à 11:24:16 | Re : abération pointeurs de fonction ?

vicenzo

Membre Club
acx01b : Pour info, le code que j'ai mis était ton code débarrassé des ******** en trop.

Merci de m'apprendre d'une fonction correspond à une adresse mémoire... C'es trop sympa !
Pour info je faisais déja du C que tu apprenais pythagore au collège...

Sinon
les expressions k = (*func)() et k = func() sont toute les deux valables car elle exécutent toute les deux mafonction()

Pour ton information la vrai facon de faire est  (*func)()  ...

func() n'est qu'une forme de la première acceptée par la norme pour 'faire + simple'.

Donc avant de donner des lecons, revise ta norme !!!

Bonne continuation....



1 2

Cette discussion est classée dans : fonction, int, pointeurs, mafonction, abération


Répondre à ce message

Sujets en rapport avec ce message

creer une fonction retournant un tableau [ par billcala ] j'essaie de créer une fonction qui doit initialiser un tableau d'entiers : le code que je fais est :int mafonction()[8];using namespace std;int mafonc remise a zero de fonction [ par galian ] j'utilise une fonction de gestion aléatoire de chiffre type:int fonction (int,int)cette fonction renvoi une variable res;dans main() j'utilise cette f Pour les doués, moi j'en peu plus ! [ par sena ] Salutje voudrais en fait faire un passage de paramètre a une fonction dont un a une valeur par défaut. (puis inclure ca dnas une DLL)Par exemple une f scanf() [ par clb ] bonjour à tous,j'ecris par exemple :int fonction(){ if(true) return 0; else return -1}dans main, si cette fonction retourne 0,alors j'appli Fonction récursive simple en C ANSI [ par pedu ] Bonjour à tous,je suis un jeune développeur et j'aimerai avoir un exemplesur l'utilisation d'une fonction récursive simple en Langage Cint facto(int); Au secour ! [ par slashparof ] Au secour! Je ne comprend vraiment pas le problème visual studio me compile cette fonction correctement, mais mon programme cause une erreur quand j'a Tableau de structure [ par tomsawyerbelgique ] Bonjour suriez-vous me dire comment fait-on pour passer un tableau de structure dans une fonction:struct student { char nom[10]; int nbcot ProB avec la fonction int remove (const char*) [ par Avalon10101 ] _-=AvAloN=-_Jai un petit prob avec cette fonction :Je cré mon prog il na aucune erreur é il est donc pré à etre exécuter pour suprimer un fichier test tableau a double entrée alloué dynamiquement [ par amortlintelligence ] Voila j'aurais voulu utiliser un tableau (tableau de tableau) dans une fonction. Je pense qu'il faut donc que je le crée dynamiquement avec un code du Pb de class [ par SfyLer ] Imaginons :class teste{public:void fonction();void fonction2();};int teste::fonction() {int a = 1;return 0;}int teste::fonction2() {//ici j'aimerais r


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales