Il faut revoir ta structure du doublet, dans elt tu stockes un entier ou un pointeur ?
Dans ta définition de car(doublet), tu accèdes un champs car qui n'existe pas. car(doublet), ça semblerait plutôt être simplement (doublet) [1]. À ce moment, tu peux écrire car(Cons)->elt = elt;.
M'enfin, pour moi car et cdr c'est pour extraire, pas pour aller modifier. Pour faire le Cons en C j’accéderais directement aux champs.
[1] Sauf que là tu conserves dans ton doublet un lien vers la liste, et tu retournes "l'original" - s'il fait partie d'une liste référencée par ailleurs et qu'ensuite tu le modifies... il faudrait allouer un doublet à retourner, et gérer les allocations / libérations mémoire (il me semble que le lisp utilise un ramasse miettes pour gérer la perte de référence sur ses structures dynamiques...).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# Retour papier
Posté par lolop (site web personnel) . En réponse au message Affichage listes chainées en C. Évalué à 2.
Il faut revoir ta structure du doublet, dans
elttu stockes un entier ou un pointeur ?Dans ta définition de
car(doublet), tu accèdes un champscarqui n'existe pas.car(doublet), ça semblerait plutôt être simplement(doublet)[1]. À ce moment, tu peux écrirecar(Cons)->elt = elt;.M'enfin, pour moi
caretcdrc'est pour extraire, pas pour aller modifier. Pour faire le Cons en C j’accéderais directement aux champs.[1] Sauf que là tu conserves dans ton doublet un lien vers la liste, et tu retournes "l'original" - s'il fait partie d'une liste référencée par ailleurs et qu'ensuite tu le modifies... il faudrait allouer un doublet à retourner, et gérer les allocations / libérations mémoire (il me semble que le lisp utilise un ramasse miettes pour gérer la perte de référence sur ses structures dynamiques...).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN