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 et pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut Structure et pointeur
    Bonsoir,

    J'aimerai réaliser une fonction qui insère l'élement v en tête de la pile. Mais si le pointeur sur la pile est initiallement NULL, je veux crée une nouvelle pile.
    Voici mon code, qui ne compile pas et m'affiche : expected expression before ‘element_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
    17
    18
    19
    20
    21
    typedef struct element {
      int valeur;
     
     struct element *prec;
    } element_t;
     
    static element_t
    *pile_head(element_t *pile, int v)
    {
      if (pile == NULL)
        element_t *pile1 = NULL;
      element_t *element = malloc(sizeof(element_t));
     
     if (v != 0) {
        element->valeur = v;
        element->prec = pile;
        pile = element;
        return pile;
    }
      return pile1;
    }
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour kimikou

    Je ne sais ce que tu cherche à faire avec cette fonction, il y a beaucoup d'erreur dans ton code

    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
     
    typedef struct element {
      int valeur;
      struct element *prec;
    } element_t;
     
    static element_t *pile_head(element_t *pile, int v)
    {
      if (pile == NULL)
        element_t *pile1 = NULL;     // <-- ici, tu declare une variable après du code, c'est faux
      element_t *element = malloc(sizeof(element_t)); // <<- est ce utile si v ==0
     
     if (v != 0) {
        element->valeur = v;
        element->prec = pile;  //  <-- problème d'indirection de pointeur
        pile = element;
        return pile;
    }
      return pile1; // <-- il set a quoi pile1, autant renvoyer NULL directement 
     
    }
    Bon courage, car ce code ne fera pas ce que tu souhaite
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre éprouvé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Salut,

    Avec les langages orientés objet, ca fait un moment que je n'ai pas utilisé les structures, néanmoins, ton problème me fait penser un peu aux listes chainées. On trouve de bonnes explications sur Internet.

    D'après ce que j'ai lu, la définition de la structure diffère un peu de ce que tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    struct Nom_de_la_liste {
    char Chaine[16];
     
    int Entier;
     
    struct Nom_de_la_liste * pSuivant;
     
    };
    Peut-être une erreur à ce niveau ?

    Bonne journée,

    Aldiemus

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 90
    Par défaut
    Bonjour et merci à tous les deux.

    Cependant bpy1401, qu'entends - tu par "problème d'indirection de pointeur" ?

  5. #5
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour Kimikou

    C'est une erreur de ma part,

    ce message d'erreur est souvent levée quand tu affecte une valeur alors que l'on attend une adresse, ou vice versa.

    Ici, c'est correct , mon compilo s'en emmélé les pinceaux à cause des erreurs qu'il avait détecté au moment de la déclaration de tes pointeurs. j'ai corrigé le code pour supprimer les erreurs de compilation.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct element {
      int valeur;
      struct element *prec;
    } element_t;
     
    static element_t *pile_head(element_t *pile, int v)
    {
       element_t *element;
       element_t *pile1;
     
       if (pile == NULL) {
          pile1 = NULL;
       }
     
       element = malloc(sizeof(element_t));
     
       if (v != 0) {
        element->valeur = v;
        element->prec = pile;
        pile = element;
        return pile;
      }
     
      return pile1;
    }
    Par contre je ne peux pas t'assurer qu'il fasse bien ce que tu souhaite.
    Page sur Developpez : http://pbriand.developpez.com

  6. #6
    Membre éprouvé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Bonjour,

    Je n'ai pas trop compris à quoi sert pile1 dans ta fonction. Dans ta fonction, si pile n'est pas nul à l'entrée et que v =0, alors tu retourne pile1 sans lui affecter de valeur, c'est assez étrange. Normalement, ta fonction devrait pouvoir s'écrire de la façon suivante :

    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
     
    static element_t *pile_head(element_t *pile, int v)
    {
    	element_t *element;
     
    	element = malloc(sizeof(element_t));
     
    	if (v != 0) {
    		element->valeur = v;
    		element->prec = pile;
    		pile = element;
    	}
     
    	return pile;
     
    }
    Donc, si je comprends bien, tu ne veux pas ajouter l'élément 0 dans ta pile. Y a t'il une raison particulière à ca ?

    Bonne journée,

    Aldiemus

Discussions similaires

  1. Structures et pointeurs
    Par Tchetch dans le forum C
    Réponses: 14
    Dernier message: 19/10/2006, 13h30
  2. Structure et pointeur
    Par Nalido dans le forum C
    Réponses: 5
    Dernier message: 08/08/2006, 15h08
  3. Copie de structure par pointeur - Problème LSB MSB
    Par the_ionic dans le forum Réseau
    Réponses: 4
    Dernier message: 17/07/2006, 15h08
  4. Structures et pointeurs
    Par mastochard dans le forum C
    Réponses: 17
    Dernier message: 25/05/2006, 11h55
  5. [structure et pointeur] problème d'affichage
    Par kitsune dans le forum C
    Réponses: 17
    Dernier message: 22/03/2006, 22h20

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