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 :

Statistiques de char *


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 146
    Par défaut Statistiques de char *
    Bonjour à tous,

    J'ai un peu de mal avec le fait qu'on puisse mettre des nombres dans un char*.

    Malgré que ce soit le cas, j'ai encore plus de mal à concevoir que l'on puisse "jouer" avec ces nombres, j'entends par la, calculer leur somme, leur moyenne...etc

    Pourriez vous me donner un exemple s'il vous plait ? A moins que je sois totalement à coté de la plaque et que ce soit impossible...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      char *a, *b, *c = 434, 545, 652; 
    printf("%c",a+b+c);
    Je sais bien entendu que la syntaxe est incorrecte car je peux pas employer d opérateur binaire à des char *, mais c'est l'idée que je souhaite faire passer...

    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut

    Est-ce que tu pourrais expliquer plus clairement ? Je n'ai absolument rien compris à ton message.

    Les objets a, b et c (qui sont mal déclarés) de ton exemple sont des pointeurs. Que veux-tu faire avec des pointeurs ?

    Les pointeurs sont des objets qui, comme les objets de types de base, se trouvent à une adresse spécifique et contiennent une valeur. La valeur contenue dans un pointeur a la particularité d'être une adresse mémoire. Et un pointeur, contrairement aux autres objets, a aussi une seconde particularité : il peut être déréférencé, c'est-à-dire qu'on peut aller (écrire ou lire) à l'emplacement mémoire correspondant à sa valeur (qui est une adresse). C'est tout l'intérêt d'un pointeur.
    On ne peut pas additionner des pointeurs (on peut les additionner avec un entier par contre), ni les diviser, ni les multiplier ; cela n'aurait aucun sens. Par contre on peut les soustraire ; cela permet de mesurer la "distance" entre deux cases mémoire.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 146
    Par défaut
    Je reconnais que c'est vraiment brouillon.

    Alors je m'explique.
    J'ai une structure composée de pointeurs sur char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct
    {
        char *  noms;
        char *  age;
        char *  nbPersonnes;
        char *  nbHommes;
        char *  nbFemmes;
     
    } donnees;
    et je souhaiterais faire une fonction qui me calcule la moyenne du nombre d hommes de toutes mes structures (par exemple...).

    Etant donné que même les nbPers/H/F sont des char * , comment suis je censé faire ?

    En espérant avoir été plus clair.
    Merci d'avance.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Etant donné que même les nbPers/H/F sont des char * , comment suis je censé faire ?
    Comme ce sont des pointeurs qui pointent sur un objet de type char, il suffit de les déréférencer, pour accéder à l'objet en question. Un pointeur sert à ça.

    age -> pointeur sur char.
    *age -> l'objet de type char, sur lequel le pointeur pointe.

    Même chose pour nbPersonnes, nbHommes et nbFemmes.

    Après, pour calculer la moyenne/somme, tu fais comme s'il s'agissait de variables classiques (sauf qu'il faut tenir compte ici qu'il s'agit d'une structure et adapter le code en conséquence).

    Si tu poses ce genre de question, c'est que -je suppose- tu n'as pas bien assimilé la notion de pointeurs. Je te propose de bien relire les cours à ce sujet.

    Mais bon, concernant age, nbPersonnes, nbHommes et nbFemmes, je ne comprends pas pourquoi tu veux utiliser des pointeurs (cela oblige à réserver de la mémoire supplémentaire via malloc par exemple). Tu peux mettre dans ta structure des membres de type char carrément (je te conseille int pour ce genre de données, char n'est pas spécifiquement approprié).

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Mai,

    Le meilleur moyen aurait été de mieux réfléchir à la structure nécessaire.

    Pourquoi stocker des valeurs numériques sous forme de chaîne de caractères ?


  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Pourquoi stocker des valeurs numériques sous forme de chaîne de caractères ?
    Argh... j'avais même pas pensé à cette possibilité.

    @larchicha :
    Tes données numériques sont stockées sous forme de chaines de caractères ou d'un entier pointé par un pointeur ? Car c'est pas du tout pareil...
    En tout cas, comme le dit droggo, stocker des nombres dans des chaines de caractères, c'est pas terrible...

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 146
    Par défaut
    A vrai dire, toutes mes données sont extraites d'un fichier CSV, et pour les récupérer, j'ai pensé qu'un pointeur sur char était une bonne solution...

    Et je pensais plus à ce que ce soit des entiers pointés par des pointeurs...

    Pour ce qui est du déréférencement, j'ai relu le cours du SDZ (désolé si ça concurrence :/) et je vois le shmilblik, mais si j'essaie de coder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char a = 5;
    char *aPrime = &a;
    char b =5;
    char *bPrime = &b;
    char somme = *aPrime+*bPrime;
    printf("%c",somme);
    Tout plante à l éxécution - Windows a cessé de fonctionné -
    (Merci du temps que vous m'accordez)

    PS : Et là vous allez me dire, mais pourquoi ne pas faire directement a+b ?
    Parce que ce que je récupère du fichier CSV arrivent sous forme de char *...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2003, 16h24
  2. Réponses: 6
    Dernier message: 24/03/2003, 17h11
  3. Traitement d'un char* renvoyé par une DLL en C++
    Par LuluTchab dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2003, 21h48

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