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 :

Structure en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 28
    Par défaut Structure en C
    Bonjour,

    J'ai crée une structure comme ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct
    {char nom[MAX], prenom[MAX];
     float moyenne;
    } etudiant;
    typedef etudiant *p_etudiant;
    int main()
    {
      p_etudiant p1;
      p1->moyenne=2;
      return 0;
    }
    Et lors de la compilation j'ai ce warning :
    Nom : 1.png
Affichages : 239
Taille : 6,2 Ko
    Savez vous comment initialiser P1 d'après le message de warning ? Merci par avance

  2. #2
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    p1 est un pointeur, donc avant de le déréférencer (c'est à dire accéder où il pointe), il faut l'initialiser.
    C'est à dire le faire pointer vers un espace mémoire valide. (soit pointer sur une structure etudiant existante ou vers un bloc mémoire alloué sur le tas avec malloc).


    En passant, c'est une mauvaise idée de cacher un type pointeur avec typedef.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 28
    Par défaut
    Citation Envoyé par CGi Voir le message
    p1 est un pointeur, donc avant de le déréférencer (c'est à dire accéder où il pointe), il faut l'initialiser.
    C'est à dire le faire pointer vers un espace mémoire valide. (soit pointer sur une structure etudiant existante ou vers un bloc mémoire alloué sur le tas avec malloc).


    En passant, c'est une mauvaise idée de cacher un type pointeur avec typedef.
    Bonjour,
    P1 pointe vers la structure puisque j'avais écris
    typedef etudiant *p_etudiant;
    p_etudiant p1;
    donc quand j'écris
    p1->moyenne=2;
    C'est une façon d'initialiser non ?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gsxr100045 Voir le message
    P1 pointe vers la structure puisque j'avais écris
    typedef etudiant *p_etudiant;
    Oui et encore une fois on se demande tous pourquoi. Quand tu as besoin d'un int, tu déclares aussi un pointeur sur int???

    Citation Envoyé par gsxr100045 Voir le message
    donc quand j'écris
    p1->moyenne=2;
    C'est une façon d'initialiser non ?
    Le compilateur t'a déjà répondu. Mais si tu veux plus de détail, est-ce que l'instruction p1->moyenne=valeur correspond à l'instruction p1=valeur???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Tu as défini un modèle, (un type) pour ta structure, mais tu n'as pas défini d'objet (de variable) du type de ta structure, elle n'existe pas encore.
    Le pointeur p1 attend l'adresse d'une variable du type de ta structure : p1 = adresse d'un objet (variable) etudiant;
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 28
    Par défaut
    Citation Envoyé par CGi Voir le message
    Tu as défini un modèle, (un type) pour ta structure, mais tu n'as pas défini d'objet (de variable) du type de ta structure, elle n'existe pas encore.
    Le pointeur p1 attend l'adresse d'une variable du type de ta structure : p1 = adresse d'un objet (variable) etudiant;
    Désolé, je ne sais pas comment faire, j'avais vu un exemple sur internet et j'ai essayé et cela ne correspond pas vraiment à ce qu'ils disent. Mais je vais y réfléchir (dans 1 jour ou 2). Merci pour les conseils

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par gsxr100045 Voir le message
    Savez vous comment initialiser P1 d'après le message de warning ?
    Comme toute variable : en écrivant p1=valeur_a_initialiser.
    Et comme p1 est un pointeur (et là on se demande bien pourquoi) donc destiné à stocker une adresse, ben tu dois lui mettre une adresse correcte et là à toi de te débrouiller (mais c'est bien de ta faute, après-tout c'est toi qui l'a créé ce pointeur).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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