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
A voir également:

7 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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