IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Listes chainee et cast de void* [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut Listes chainee et cast de void*
    Bonjour à tous et toutes.

    Alors voilà, j'aimerais faire une fonction qui me permettrait de créer une liste chaînée pouvant contenir au choix, des int, des char, des doubles etc...

    Pour faire ça, j'avais pensé à une structure ressemblant à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct s_chain
    {
    void *elem;
    size_t elemsize;
    struct s_chain *next;
    }t_chain;
    "elemsize" me sert à savoir quelle place prends l'élément en mémoire. Donc en gros, si je lui envoie "salut" il vaut 6 et si je lui envoi 5.5 il vaut 8.
    Ensuite, pour la fonction créant un nouveau maillon, je pensais à quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    t_chain *newlist(void *elem, size_t elemsize)
    {
    t_chain *new;
     
    new = malloc(sizeof(t_chain));
    new->elem = elem;
    new->elemsize = elemsize;
    new->next = NULL;
    return (new);
    }
    Mais je vais avoir quelques soucis, le premier c'est que mon programme ne compilera pas puisque si j'envoie un char à ma fonction, elle me dira que ce n'est pas un "void *", donc il faudra que j'envoie "&variable" à ma fonction, mais du coup, si je modifie ma variable, je modifierais dans le même temps la variable de ma liste chaînée.

    Donc il faut que je fasse un cast, et c'est mon deuxième problème, comment cast alors que je ne connais pas le type ? J'avais pensé à faire une fonction à part, qui ferrait un memalloc et un memcpy de mon "elem" grâce à mon "elemsize" mais je me demande si ça serait viable ?

    De toute on en arrive au troisième problème, lorsque j'essaierais d'afficher mon elem, on me demandera "" quel type veut-tu afficher ?". Donc si je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d\n", begin->elem)
    J'aurais une erreur me disant que printf attends un "int" et non un "void *".

    Donc si vous avez des idée/conseils pour m'aider à faire progresser le shmilblik, je suis preneur. D'autant plus que j'ai grand mal encore à gérer les types "void" et que je suis sûr que ce genre d'exercice peut m'aider à mieux les appréhender.

    Merci du temps passé à lire ce message jusqu'au bout, et du temps que vous prendrez pour m'aider.

    PS : Désolé pour l'indentation, mais apparement, ma touche tab ne fonctionne pas sur le forume .

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour, ca existe déjà dans le framework .Net :
    LinkedList

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Je pense que tu t'es trompé de sous-forum, ici il s'agit de C# (technologie .Net) et non pas de C comme dans ton code (et dans ton titre [void *])
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Oups !

    Effectivement, sincèrement désolé, faute d'étourderie !

    Je déplace ma demande dans le bon forum et je lock celle-ci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Listes chainee et cast de void*
    Par Sivenruot dans le forum C
    Réponses: 10
    Dernier message: 17/10/2014, 09h22
  2. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 20h49
  3. [LG]liste chainee + pointeur + affichage
    Par k_ro dans le forum Langage
    Réponses: 6
    Dernier message: 17/01/2004, 14h58
  4. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 23h34
  5. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo