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 :

différence d'adresse résultat


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Points : 128
    Points
    128
    Par défaut différence d'adresse résultat
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    double table [6];
      for (int i = 0; i < 6; i++)
        table[i] = sin(i);
     
    double *u = &t[3];
      double *v = &t[1];
    cout << u - v << endl;
    Pour u-v, j'obtient -2.
    Mais pour v, j'obtient 0xbf820008 et pour u 0xbf820018.
    Or il y a 10 d'écarts entre ces 2 adresses.

    Pourquoi u - v est différent de 10?
    Pourquoi -2 et pas 2?

    Merci d'avance.

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    u - v donne 2 pas - 2 (tu as du te tromper en testant)

    Les pointeurs ont un type. Ici tu fais une soustraction de double* donc le résultat va être le nombre de double que l'on peut mettre en mémoire entre l'adresse pointée par u et l'adresse pointée par v.

    Si tu veux savoir combien d'octet sépare l'adresse pointée par u de l'adresse pointée v alors il faut caster les pointeurs u et v dans un type dont la taille sous-jacente est 1 octet par exemple en char* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << (char*)u - (char*)v << endl;
    Ce qui affichera 16 (soit deux doubles de 8 octets)

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonsoir,

    Pourquoi u - v est différent de 10?
    En fait la différence est de (10)16 en hexa car un double représente 8 octets.
    Et comme entre &table[1] et &table[3] il y a 2 doubles... ça fait (16)10 soit (10)16.

    A+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Points : 128
    Points
    128
    Par défaut
    Merci pour les réponses.

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

Discussions similaires

  1. [XL-2003] Différence entre le résultat en live et en macro
    Par piem6586 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/05/2012, 18h23
  2. Différence d'adresse mémoire stack et heap
    Par easyquizz dans le forum C++
    Réponses: 16
    Dernier message: 29/01/2009, 22h26
  3. Réponses: 6
    Dernier message: 11/06/2008, 18h04
  4. Différence de résultats d'une requête entre OpenQuery et ADO
    Par hellbilly dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/04/2006, 18h29
  5. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 17h03

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