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 :

Signification de termes dans un langage C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Par défaut Signification de termes dans un langage C
    Bonjour,

    je suis en train de coder en java une liste doublement chaînée, et, pour m'aider, je désire m'inspirer d'un code que j'ai trouvé sur un site internet écrit en C:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    int supp(dl_Liste *liste, int pos){
      int i;
      dl_Element *supp_element,*courant;
     
      if(liste->taille == 0)
        return -1;
     
      if(pos == 1){ /* suppresion de 1er élément */
        supp_element = liste->debut;
        liste->debut = liste->debut->suivant;
        if(liste->debut == NULL)
          liste->fin = NULL;
        else
          liste->debut->precedent == NULL;
      }else if(pos == liste->taille){ /* suppression du dernier élément */
        supp_element = liste->fin;
        liste->fin->precedent->suivant = NULL;
        liste->fin = liste->fin->precedent;
      }else { /* suppression ailleurs */
        courant = liste->debut;
          for(i=1;i<pos;++i)
            courant = courant->suivant;
        supp_element = courant;
        courant->precedent->suivant = courant->suivant;
        courant->suivant->precedent = courant->precedent;
      }
      free(supp_element->donnee);
      free(supp_element);
      liste->taille--;
      return 0;
    }
    Mais voilà, je ne comprends pas certaines petites choses:

    - que signifie: dl_Liste *liste? Je ne comprends pas l'étoile
    - idem ici: dl_Element *supp_element,*courant
    - que signifie: free(supp_element->donnee);
    free(supp_element);
    Je ne comprends pas le free.

    En vous remerciant tous par avance et en vous souhaitant un agréable lundi.

    Johnny3

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Par défaut
    - que signifie: dl_Liste *liste? Je ne comprends pas l'étoile
    - idem ici: dl_Element *supp_element,*courant
    * pour dire que liste est un pointeur
    - que signifie: free(supp_element->donnee);
    free(supp_element);
    Je ne comprends pas le free.
    Free permet de libérer la mémoire, n'existe pas en java puisqu'il y a le garbage collector

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    C'est un concept du C qui est masqué en JAVA. quand tu fais en JAVA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UneClasse objet = new UneClasse();
    que se passe t'il?
    la référence objet est alloué sur la pile,
    mais l'objet lui même est alloué sur le tas.
    objet ne fais que contenir l'adresse de l'objet (retourné pas le constructeur)
    dans le tas mais pas l'objet lui même.
    Et bien en C c'est la même chose,
    mis à part que pour contenir l'adresse de quelque chose,
    il nous faut un pointeur (c'est ça la notation *).
    A la différence de JAVA, le C n'as pas de garbage collector,
    c'est au programmeur de libérer la mémoire après utilisation de l'objet.
    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int * pointeur_sur_entier = malloc (sizeof (int));
    
    /* malloc est en quelque sorte un constructeur générique,
     on lui passe la taille de l' "objet" que l'on veut créer 
    et il nous retourne son adresse dans le tas.
    Adresse que l'on stocke dans dans un pointeur. */
    
    *pointeur_sur_entier = 3; 
    
    /* ici on oublie surtout pas de déréférencer le pointeur, 
    c'est à dire que celui ci est un pointeur sur entier 
    comme son nom l'indique donc si je fais 
    pointeur_sur_entier = qq chose, 
    je modifie l'adresse à laquelle il pointe 
    mais en aucun cas le contenu de l'objet, 
    pour cela, on le déréférence, c'est à ça que sert l'étoile, 
    ça dit, je vais modifier l'objet pointer, pas le pointeur. 
    En l'occurence, j'ai demandé à allouer un entier dans le tas, 
    et la j'ai demandé à lui affecter la valeur de 3 */
    
    /* ici tu es sensé utilisé ton entier comme tu le veux */
     
    free (pointeur_sur_entier);
    
    /* une fois que tu as finis de t'en servir, 
    tu le libères avec la fonction free() */

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par johnny3 Voir le message
    je suis en train de coder en java une liste doublement chaînée, et, pour m'aider, je désire m'inspirer d'un code que j'ai trouvé sur un site internet écrit en C:
    Si tu ne connais pas le langage C, commence par l'apprendre. Il y a trop de subtilités dans ce langage pour pourvoir réutiliser comme ça ce qui est écrit sans en connaitre le sens exact.

    Le langage C n'est pas un langage algorithmique. Cherche plutôt des exemple en Pascal, ce sera beaucoup plus 'réutilisable'.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Si tu ne connais pas le langage C, commence par l'apprendre. Il y a trop de subtilités dans ce langage pour pourvoir réutiliser comme ça ce qui est écrit sans en connaitre le sens exact.

    Le langage C n'est pas un langage algorithmique. Cherche plutôt des exemple en Pascal, ce sera beaucoup plus 'réutilisable'.
    non, c'est inutile, je suis en première année et tous mes cours sont en java. Je ne vais pas commencer à apprendre le C juste pour comprendre un code. Mais merci quand même.

    Merci aux deux autres personnes, ça m'a beaucoup éclairé.

  6. #6
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    Pour ta culture personnel ça peut toujours être utile à apprendre

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2015, 09h26
  2. un panier oui mais dans quel langage ?
    Par artotal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/08/2006, 03h36
  3. Dans quel langage a été écrit le compilateur Delphi ?
    Par maamar1979 dans le forum Langage
    Réponses: 1
    Dernier message: 08/07/2006, 09h43
  4. Signification de File_priv dans users de la BD mysql
    Par BBF dans le forum Installation
    Réponses: 9
    Dernier message: 30/06/2005, 12h31

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