Les pointeurs en C

Fermé
axelvdk - 23 juin 2012 à 14:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 23 juin 2012 à 16:02
Bonjour,

J'ai une question sur les pointeurs en C, je comprends suffisamment les pointeurs pour savoir les utiliser mais c'est plus d'ordre théorique.

Je vais illustrer par un exemple :


struct L{char cLu; L *next;} *courant ; *deb; // de quoi faire une liste de lettre

deb=NULL; //initialisation et allocation memoire
deb=(struct L*)malloc(sizeof(struct));
deb->cLu='A';
crt=deb;
crt->next=(struct L*)malloc(sizeof(struct));
crt=crt->next;

Pour la suite de la liste j'utilise une boucle dans laquelle je mets juste pas ce qui correspond au pointeur deb.

Ma question est : comment se fait-il que crt=crt->next n'écrase rien ?
crt==A dès qu'il reçoit le deb, le suivant (crt->next) reçoit de la mémoire et que devient crt quand il reçoit crt->next ou la mémoire qui lui est allouée ?

Si quelqu'un a le temps de me répondre, c'est vraiment gentil à lui.

Merci de m'avoir lu,


Axel





1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 juin 2012 à 16:02
Bonjour,

Attention aux struct. Vous l'utilisez mal.
struct L{char cLu; L *next;} *courant ; *deb;
Il ne faut pas oublier le struct pour définir *next. De plus, ne mets pas de ";" entre courant et deb.

deb=NULL; //initialisation et allocation memoire
Non, NULL n'alloue rien du tout.

deb=(struct L*)malloc(sizeof(struct));
Cette instruction réalise l'allocation et l'initialisation. Donc pas besoin de mettre deb à NULL juste avant. De plus le cast est superflue.

crt=deb
D'où sort crt ? C'est le pointeur courant j'imagine ?

comment se fait-il que crt=crt->next n'écrase rien ?
Comment ça ? malloc n'initialise pas la zone mémoire pointée. Donc pas d'écrasement. Ou alors précisez mieux votre question.

que devient crt quand il reçoit crt->next ou la mémoire qui lui est allouée ?
Beh crt devient prend la mémoire de crt->next, donc la valeur sera : crt->next->cLu, non intialisé ici.
0