Affectation d'une adresse dans une structure?

Résolu
ENITIEN -  
ENITIEN2 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai le code suivant qui est celui de création de liste chainée(empilement)qui fonctionne très bien
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct Noeud { int num;struct Noeud * suivant;} noeud;

noeud *premier=NULL;
void insert (int x)
{noeud *p = premier;
premier = (noeud*) malloc(sizeof(noeud));
assert (premier != NULL);
premier->num = x;
premier->suivant = p;}

main()
{int x;noeud *p;
puts("Saisir une serie d entiers suivi d un caractere : ");
while (scanf("%d", &x) == 1) insert(x);
puts("\n Serie de nombre lus (affiches dans l ordre inverse): ");
for(p = premier; p!=NULL;p = p->suivant)
printf("%5d\n", p->num);
return 0;
}
ce que je comprends pas est l'instruction écrite en gras : en effet *p est un noeud(c à d une structure) et premier est une adresse
alors comment on peut affecter premier dans *p?
merci d'avance

7 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    Je ne vois pas le problème:
    - on n'utilise pas '*p' mais 'p', or 'p' est l'adresse d'un noeud (déclaré comme noeud*),
    - l'adresse du premier noeud est fixé à NULL, car c'est une adresse particulière puisqu'impossible (donc reconnaissable), et il faut bien, au départ, définir un noeud (même vide) puisque pour créer un noeud il faut remplir le champ 'suivant'.
    A priori le programme me paraît correct.
    Bonne réflexion.
    0
  2. lami20j
     
    Salut,

    en effet *p est un noeud(c à d une structure) et premier est une adresse
    alors comment on peut affecter premier dans *p?


    Pour mieux comprendre écrit comme ça

    noeud* premier=NULL;
    void insert (int x)
    {noeud* p = premier;


    premier est un pointeur de type noeud*
    p est un pointeur de type noeud*

    ou

    noeud* premier;
    premier=NULL;
    void insert (int x)
    {noeud* p; 
    p = premier;  // p et pas *p
    0
  3. ENITIEN
     
    merciiiiiii beaucoup pour vos réponses
    reste juste une seule chose : si je comprends bien le type noeud* représente "l'adresse d'une structure?sinon c'est quoi le type noeud*?
    0
  4. lami20j
     
    Re,

    typedef struct Noeud { int num;struct Noeud * suivant;} noeud;

    noeud* c'est un type pointeur de structure qui pointe sur une structure de type nœud que tu as défini.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ENITIEN2 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
     
    merci beaucoup :))
    avant je croyais que lorsqu'on déclare int *p je croyais que *p est une entier alors que c pas le cas apparemment
    0
  7. lami20j
     
    Re,

    *p c'est le contenu de l'objet pointé par le pointeur p de type int*
    int i=10;
    int* pi;
    pi=&i; // pi pointe sur i
    *pi c'est le contenu trouvé l'adresse &i
    0
  8. ENITIEN2 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
     
    trèèèèès clair
    merci encore :) ça m'a permis de comprendre beaucoup de choses qui était un peu flou
    0