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 :

Définir une structure en C


Sujet :

C

Vue hybride

direct Définir une structure en C 01/05/2009, 00h09
Melem Non, une structure ne peut... 01/05/2009, 09h17
direct Merci bien pour cette... 01/05/2009, 15h06
diogene typedef int FSOMME(const Obj... 01/05/2009, 16h21
direct typedef int FSOMME(const Obj... 07/05/2009, 20h46
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Par défaut Définir une structure en C
    Bonsoir,
    On sait qu'une structure contient plusieurs variables de même ou de différents type alors est ce on peut créer une structure qui contient un prototype de fonction de telle façon que la fonction fait des opération sur une variable du type qu'on a déjà crée; finalement mon but est d'avoir une chose comme ça
    par exepmle on a la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct
    {
    int t[50];
    int somme(int *a);
    }NouveauObjet;
    et aprés avoir implémenter la fonction somme on peux savoir la somme des éléments du tableau en appelant la fonction se trouvant dans le corp de cette structure qui compose notre variable de type NouveauObjet

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Non, une structure ne peut contenir de déclaration de fonction. Par contre elle peut posséder un champ de type "pointeur de fonction". Par exemple :
    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
    typedef int FSOMME(const Obj *);
     
    int ObjSomme(const Obj * p); /* Cette fonction est de type FSOMME. */
     
    typedef struct {
        int t[50];
        FSOMME * somme;
    } Obj;
     
    /* Astuce : Créer une variable globale avec un champ "somme" initialise. */
     
    Obj _Obj = { {0}, ObjSomme };
     
    int main()
    {
        Obj x = { {0}, NULL }, y = { {0}, NULL };
     
        int s1 = _Obj.somme(&x);
        int s2 = _Obj.somme(&y);
     
        return 0;
    }
     
    int ObjSomme(const Obj * p)
    {
        int i, s = 0;
     
        for(i = 0; i < 50; i++)
            s += p->t[i];
     
        return s;
    }

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Par défaut
    Merci bien pour cette solution

    Mais j'ai pas vraiment compris ça à 100%

    La première ligne du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int FSOMME(const Obj *);
    FSOMME est considérée comme quoi dans cette définition de type car je sais lorsqu'on créer un type il contient des variables précédées par le type (int, char, long..).
    Mais j'ai confus entre cette définition et ce qui se trouve dans ce nouveau type.
    ça ne signifie pas que j'ai pas pensé a cette méthode longuement alors ce que j'ai compris c'est que cette création de type "FSOMME" nous permet de construire un pointeur par la suite qui se pointe vers les "int" ainsi on considère ce pointeur comme une petite variable spéciale il appelle une fonction qui retourne la somme puis il se pointe sur cette résultat alors c'est un peut de dynamique ici (si c'est le cas alors j'aime bien cette méthode ^^)

    Alors svp une petite explication pour ce code s'il vous plaît

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int FSOMME(const Obj *);
    Cette ligne définit FSOMME comme le type "fonction retournant un int et ayant un argument du type pointeur sur un Obj constant"

    somme est un pointeur sur FSOMME donc un "pointeur sur une fonction retournant un int ........"

    A partir de ce pointeur, correctement initialisé, on peut lancer la fonction vers laquelle il pointe. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int ObjSomme(const Obj * p)
    {....}
     
    int main(void)
    {
        FSOMME * somme = ObjSomme;
        Obj x ={......}; //initialiser x
        int s1 = somme(&x); // on peut aussi écrire int s1 = (*somme)(&x);
    // ce qui revient à faire :: int s1 = ObjSomme(&x);
        return 0;
    }

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef int FSOMME(const Obj *);
     
    int ObjSomme(const Obj * p);
    La première ligne c'est la définition d'un type, une fonction qui retourne un int et a pour paramètre un pointeur sur "const Obj"; çava, mais la déclaration de la fonction n'a pas le même nom pourquoi ?

  6. #6
    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
    La première ligne c'est la définition d'un type, une fonction qui retourne un int et a pour paramètre un pointeur sur "const Obj"; çava, mais la déclaration de la fonction n'a pas le même nom pourquoi ?
    Quand tu définis une variable de type int, cette variable ne s'appelle pas int !
    Une variable a un "nom" et un type. Son nom n'est pas le même identificateur que celui de son type.
    C'est pareil ici.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/01/2015, 23h57
  2. Bien définir une structure pour faciliter son utilisation
    Par charlebakhtovsky3 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 24/02/2011, 11h17
  3. Définir le type d'une structure contenue dans une classe
    Par vincentweb dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2009, 16h29
  4. Définir une structure en extern
    Par fabpeden dans le forum C
    Réponses: 6
    Dernier message: 24/12/2008, 14h58
  5. définir une structure en extern
    Par petdelascar dans le forum C
    Réponses: 2
    Dernier message: 02/12/2005, 19h31

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