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 :

Valeur d'un pointeur


Sujet :

C

  1. #1
    Membre actif
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Par défaut Valeur d'un pointeur
    Bonjour tt le monde,

    J'arrive po svp à trouver une explication des valeurs A,C à la fin d'exécution de ce bout de code :

    Que vaut A, B, C?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    main()
       {
          int A = 1;
          int B = 2;
          int C = 3;
          int *P1, *P2;
          P1=&A;
          P2=&C;
          *P1=(*P2)++;
    }
    Normalement (*P2)++ = C+1=4 donc A=4 et C=4. Or quand j'exécute avec Dev C++ je trouve A=3 !! (pourquoi 3 !!) et C=4.

    Merci d'avance.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Tout simplement parce que ++ fonctionne de cette façon.

    Quand vous faites :
    Pour prenez la valeur de P1 et obtenez l'adresse de A. Idem pour P2 et l'adresse de C. A ce moment là, la valeur de C est mise dans A (opérateur de de-référencement * oblige). Cela revient donc à A=C=3.
    L'opérateur ++ ne vient qu'après tout cela et incrémente après l'affection de C dans A, donc *P2 = C = 4.

    Pour obtenir A = C = 4, vous pouvez faire *P1=(*P2)++ + 1;.

  3. #3
    Membre actif
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Par défaut
    Merci d'abord pour votre réponse, tu veux dire que l'op = est prioritaire = '++' ?

  4. #4
    Membre actif
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Par défaut
    parceque normalement l'écriture (*P1)=(*P2)++ équivaut à A=C+1

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 19
    Par défaut
    Ceci devrait t'aider (tiré de la FAQ C) :

    http://c.developpez.com/faq/?page=op...ATEURS_i++_++i

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Oh oui on pouvait tout simplement faire une pré-incrémentation

    parceque normalement l'écriture (*P1)=(*P2)++ équivaut à A=C+1
    Non. C'est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *P1 = *P2 +1;
    (*P2) = (*P2) + 1;
    Si je regarde la norme C99 (document n1256), je lis au paragraphe 6.5.2.4, point 2 :
    The result of the postfix ++ operator is the value of the operand. After the result is obtained, the value of the operand is incremented.
    Donc A++ a la valeur de A et A est incrémenté après avoir obtenu la valeur (non-incrémentée) de l'opérande. Ce qui explique bien l'équivalence que je donne juste au dessus.

    Au paragraphe 6.5.3.1, point 2 :
    The value of the operand of the prefix ++ operator is incremented. The result is the new
    value of the operand after incrementation.
    ++A a la nouvelle valeur de A car l'incrémentation est faite avant d'évaluer la valeur de l'opérande.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par aminao Voir le message
    Normalement (*P2)++ = C+1=4 donc A=4 et C=4. Or quand j'exécute avec Dev C++ je trouve A=3 !! (pourquoi 3 !!) et C=4.

    Merci d'avance.
    Il y a peut être un souci avec Dev-C++ car normalement tu dois trouver la même valeur pour les deux.
    J'ai testé ton prog avec gcc et j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    La valeur de P1 est 3
    La valeur de A est 3

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Il n'y a aucun soucis avec DevC++, tu as simplement mal lu son code : P1 pointe sur A, donc *P1 et A ont la même valeur....

Discussions similaires

  1. comparer la valeur d'un pointeur
    Par suzan_ dans le forum Débuter
    Réponses: 17
    Dernier message: 16/07/2011, 03h44
  2. Réponses: 2
    Dernier message: 14/04/2011, 07h35
  3. Réponses: 5
    Dernier message: 07/03/2010, 14h59
  4. Valeur d'un pointeur non modifiée
    Par Dimitri_87 dans le forum Linux
    Réponses: 5
    Dernier message: 25/11/2008, 10h42
  5. Réponses: 3
    Dernier message: 11/08/2005, 15h54

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