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 :

Mon programme affiche n'importe quoi


Sujet :

C

  1. #41
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    On pourrait noter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *res=chaine1[i];
    *res++;
    Non, plutôt comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *res=chaine1[i];
    res++;
    Bien qu'au final cela revient au même, car pourrait lui-même s'écrire : Or, la première expression ne fait rien, le compilateur le signale d'ailleurs par un warning.

  2. #42
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je comprends toujours mal . J'ai beaucoup de problème à assimiler la notion de pointeur

    Cette ligne affecte le contenu de chaine1[i] à *res (c'est à dire qu'elle copie le contenu de chaine1[i] à l'adresse pointée par res) puis incrémente le pointeur res (qui est donc déplacé "sur la case suivante").
    Je ne comprends pas pourquoi *res++ équivaut à *res; et res++; ?

    Dans le premier cas on incrémente le pointeur qui pointe vers une adresse et dans le deuxième une variable qui pointe sur une autre adresse ?
    Pourquoi ça revient au même ?

  3. #43
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    Je ne comprends pas pourquoi *res++ équivaut à *res; et res++; ?
    Vu que le ++ postfixé a une priorité supérieure par rapport à l'opérateur d'indirection (le *), cette expression est donc évaluée en premier.
    Ensuite, le reste est évalué.

    Pour imager la chose, voici l'ordre (en rouge) où sont évaluées les expressions de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *res++; /* L'opérateur ++ a la priorité */
    *res++; /* cette expression est évaluée ensuite */
    Comme le ++ est postfixé, même s'il est évalué en premier, la valeur du pointeur ne sera modifiée qu'à la fin (contrairement au ++ préfixé).
    Or, l'expression ne produit aucun effet, elle ne sert à rien.

    D'où l'intérêt de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *res=chaine1[i];
    res++;
    plutôt que celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *res=chaine1[i];
    *res++;
    ... qu'on peut écrire en une seule ligne comme cela a été dit plus haut :Voici l'ordre où les expressions seront évaluées (toujours en rouge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    *res++=chaine1[i]; /* Priorité supérieure */
    *res++=chaine1[i]; /* Priorité identique (je suppose donc qu'elle est évaluée à ce moment-là) */
    *res++=chaine1[i]; /* Priorité plus faible */
    *res++=chaine1[i]; /* Priorité encore plus faible */
    Dans le premier cas on incrémente le pointeur qui pointe vers une adresse et dans le deuxième une variable qui pointe sur une autre adresse ?
    Pourquoi ça revient au même ?
    Le cas de quel exemple ?

  4. #44
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    J'avais pas compris les ordres de priorité et pour moi on incrémentait le pointeur p :*p++ et la variable p ++ .
    Avec tes explications je comprends mieux , merci

Discussions similaires

  1. Printf qui affiche n'importe quoi
    Par med1001 dans le forum C
    Réponses: 2
    Dernier message: 13/04/2012, 04h11
  2. mon programme affiche aucun resultat !
    Par domxaline dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/08/2009, 05h39
  3. Cherche à afficher n'importe quoi
    Par nahouto dans le forum MATLAB
    Réponses: 12
    Dernier message: 17/08/2009, 17h49
  4. Mon PC affiche n'importe quoi après un moment
    Par hardredman dans le forum Windows XP
    Réponses: 7
    Dernier message: 23/04/2008, 19h14
  5. Programme qui m'affiche n'importe quoi
    Par Gryzzly dans le forum C
    Réponses: 8
    Dernier message: 02/01/2006, 19h25

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