Affectation d'une adresse dans une structure?

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. 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
      1. 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*?
        1. 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.
          1. 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
            1. 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
              1. trèèèèès clair
                merci encore :) ça m'a permis de comprendre beaucoup de choses qui était un peu flou