Affectation d'une adresse dans une structure?
Résolu
ENITIEN
-
ENITIEN2 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
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
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
-
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. -
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 -
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*? -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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 -
trèèèèès clair
merci encore :) ça m'a permis de comprendre beaucoup de choses qui était un peu flou