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 sur les éléments d'une structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut Pointeur sur les éléments d'une structure
    salut à tous et à toutes ;


    Tout est dans le titre , j'ai une structure Marley_t et je souhaite y accéder aux éléments de cette structure .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct mastructure_s
    {
     int  x, y, A,B,C,D,E;
     
    }Marley_t;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int fonction ( void)
     
    {
     
    Marley_t  *pointeur; // je créer un pointeur pour ma structure 
     
     
     BN_set_bit(pointeur->x,64); // ensuite j'essaye de pointer vers x 
     BN_mod_inverse(pointeur->J,pointeur->J,pointeur->y);
     BN_set_bit(pointeur->J,pointeur->x);
     
     
    }

    Lorsque je compile :
    <function argument>: implicit cast of non-0 int to pointer


    Par contre en utilisant un this ça marche sans probléme .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    int fonction ( Marley_t * this ) 
     
    {
     
     BN_set_bit( &this->x,64); // ensuite j'essaye de pointer vers x 
     BN_mod_inverse(&this->J, &this->J, &this->y);
     BN_set_bit(&this->J, &this->A, &this->x);
     
     
    }


    Lorsque je compile : - 0 error(s), 0 warning(s)

    Merci d'apporter vos différents conseils et suggéstions par rapport à l'utilisation d'un this pour pointer vers les éléments d'une structure .

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Marley_T Voir le message
    Tout est dans le titre , j'ai une structure Marley_t et je souhaite y accéder aux éléments de cette structure .
    <...>
    Merci d'apporter vos différents conseils et suggéstions par rapport à l'utilisation d'un this pour pointer vers les éléments d'une structure .
    this est un identificateur comme un autre en C. Il n'a pas de propriétés particulières.

    Le premier code est faux pour de nombreuses raisons, la plus évidente est que le pointeur n'est pas initialisé. Ensuite, dans le 2 cas, il n'y a pas de membre nommé J...

    Il faut le passer en paramètre et utiliser la même syntaxe qu'avec this (seul le nom du pointeur change).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int fonction (Marley_t * pointeur)
    {
       BN_set_bit (&pointeur->x, 64); // ensuite j'essaye de pointer vers x
       BN_mod_inverse (&pointeur->x, &pointeur->A, &pointeur->y);
       BN_set_bit (&pointeur->A, &pointeur->x);
    }
    (j'ai mis A au pif, à la place de J qui n'existe pas).

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    this est un identificateur comme un autre en C. Il n'a pas de propriétés particulières.

    Le premier code est faux pour de nombreuses raisons, la plus évidente est que le pointeur n'est pas initialisé. Ensuite, dans le 2 cas, il n'y a pas de membre nommé J...

    Il faut le passer en paramètre et utiliser la même syntaxe qu'avec this (seul le nom du pointeur change).

    en cours ...


    bonjour Emmanuel Delahaye ;


    J'ai pris en considération tout ce que vous m'avez dit et voici le nouveau code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct mastructure_s
    {
     int  x, y, A,B,C,D,E, J ;
     
    }Marley_t;


    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
     
    int fonction ( void)
     
    {
     
     
    Marley_t   *pointeur;    // Pointeur vers structure Marley_t
    pointeur = &Marley_t;   // j'initialise le pointeur vers la structure  
     
     
     BN_set_bit(pointeur->x,64); // ensuite j'essaye de pointer vers x 
     BN_mod_inverse(pointeur->J,pointeur->J,pointeur->y);
     BN_set_bit(pointeur->J,pointeur->x);
     
     
    }

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Marley_T Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct mastructure_s
    {
     int  x, y, A,B,C,D,E, J ;
     
    }Marley_t;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int fonction ( void)
    {
    Marley_t   *pointeur;    // Pointeur vers structure Marley_t
    pointeur = &Marley_t;   // j'initialise le pointeur vers la structure  
     
     
     BN_set_bit(pointeur->x,64); // ensuite j'essaye de pointer vers x 
     BN_mod_inverse(pointeur->J,pointeur->J,pointeur->y);
     BN_set_bit(pointeur->J,pointeur->x);
     
    }
    et c'est toujours faux, car ton pointeur ne pointe pas sur une structure, mais sur un pointeur qui est du type Marley_t *, mais pas sur une variable...

    Ton typedef ne definit pas une varaible, mais une structure...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int fonction ( void)
    {
    Marley_t   *pointeur, MaStruct;    // Pointeur vers structure Marley_t
    pointeur = &MaStruct;   // j'initialise le pointeur vers la structure  
     
     
     BN_set_bit(pointeur->x,64); // ensuite j'essaye de pointer vers x 
     BN_mod_inverse(pointeur->J,pointeur->J,pointeur->y);
     BN_set_bit(pointeur->J,pointeur->x);
     
    }

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Marley_T Voir le message
    J'ai pris en considération tout ce que vous m'avez dit et voici le nouveau code
    <...>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int fonction ( void)
    {
       Marley_t   *pointeur;    // Pointeur vers structure Marley_t
       pointeur = &Marley_t;   // j'initialise le pointeur vers la structure
    T'as appris le C en lisant les blagues Caram'bar ? Sans dec' tu crois que prendre l'adresse d'un type, ça a un sens quelconque ? Faut arrêter la fumette... Le C c'est pas pour les bricoleurs. Ca s'apprend et il faut du temps et beaucoup de pratique.

    Il y a des références de tutoriels et de livres sur ce site (et le mien).

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    Merci à vous tous Emmanuel , souviron34 , diogene je vais voir si j'ai plus d'erreurs lorsque je compile .

    http://bien-programmer.blogspot.com/
    http://emmanuel-delahaye.developpez.com/

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    RE -

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct Marley_s
    {
     int x,y, A ;
     
    }Marley_t;
     
     
    Marley_t *ptr;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int fonction (Marley_t * ptr)
    {
     
       BN_mod_inverse (&ptr->x, &ptr->A, &ptr->y);
     
    }
    0 error(s), 0 warning(s)

    Suite aux différents conseils ce code au dessus est CORRECT est sans erreurs


    La Quéstion :
    Y'a t'il une autre méthode pour accéder aux éléments de la structure à part un this ?

  8. #8
    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
    BN_set_bit( &this->x,64);
    Puisque pas d'erreur => la fonction BN_set_bit, attend un pointeur comme premier argument, or dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int fonction ( void)
    {
    Marley_t  *pointeur; // je créer un pointeur pour ma structure 
     BN_set_bit(pointeur->x,64); // ensuite j'essaye de pointer vers x
    on lui donne un entier comme argument! pointeur->x n'est pas un pointeur mais la valeur du champ x de la structure (un int).

    idem pour BN_mod_inverse

    A noter : dans cette fonction pointeur n'est pas initialisé.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2011, 17h43
  2. Pointeur sur un élément d'une liste
    Par azerty25 dans le forum Général Python
    Réponses: 3
    Dernier message: 18/11/2007, 12h44
  3. Travail sur les éléments d'une matrice.
    Par Jefeh dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/11/2007, 15h10
  4. Réponses: 1
    Dernier message: 09/05/2007, 15h58
  5. Réponses: 2
    Dernier message: 06/05/2007, 12h52

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