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 :

reinterpret cast qui ne fonctionne pas?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Par défaut reinterpret cast qui ne fonctionne pas?
    Bonjour tout le monde,

    j'ai besoin d'effectuer un cast sur des pointeurs,

    J'ai réalisé un programme de test, celui ci ne me donne pas le résultat escompté. Voici le code

    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
     
    #include "stdafx.h"
    #include<iostream>
     
    using namespace std;
     
    int main()
     
    	float *b = new float;
    	double *c = new double;
     
    	*b = 100;
    	*c = 10;
     
    	b = reinterpret_cast<float*>(c); // je m'attends donc ici à ce que la valeur de *b soit 10;
     
    	cout << *b << endl;
    	cout << *c << endl;
     
        return 0;
    }
    Ici je m'attends à ce que *b et *c valent 10, or *b vaut 0.

    Savez-vous d'où vient mon erreur?

  2. #2
    Membre averti
    Homme Profil pro
    Chomage
    Inscrit en
    Juillet 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chomage

    Informations forums :
    Inscription : Juillet 2016
    Messages : 24
    Par défaut
    Bonjour ,
    dans ton reinterpret_cast<> , vous castez le pointer sur double en pointeur sur float , possible que ca profoque une erreur . apres ,essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *b = reinterpret_cast<float>(*c)
    car il est possible, je ne suis pas expert de ca , que le cast des pointeur , change le type du pointeur , mais pas la valeur pointée , et donc , lors de cout , le float du début ne peut plus s'afficher , car lors du transtypage vers un pointeur vers double , ca a reset l'addresse en mémoire , et donc la valeur de la valeur pointée est 0

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Par défaut
    Merci pour ta réponse Remilia!

    Alors j'ai tenté ta proposition elle ne fonctionne pas, cependant, en combinant ce que tu as écris et ce que j'ai compris des casts, j'ai réussi à trouver une commande qui me donne un résultat satisfaisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    *b = static_cast<float>(*c);
    Je ne comprends cependant pas pourquoi ma première proposition ne fonctionnait pas : est ce que ca vient du fait que le compilateur réinterprète la suite de bit avec la commande reinterpret_cast ?

    Je ne comprends pas non plus nouveau point (dites moi si vous pensez que je dois ouvrir un nouveau thread) :

    Mon idée originelle était de créer deux variables de types differents : b et c. Je voudrais que ces variables aient toujours la même valeurs. SI a et b avaient été de même type, j'aurais fait par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int *b, *c;
    b=new int,
    c=new int;
    c= b;
    et tout le reste de mon programme, *b et *c auraient eu la mème valeur (si j'avais changé *b ou *c).

    Le problème est qu'ici je n'arrive pas à réaliser ça avec des variables de type différents et des static_cast...

    Avez vous une idée?

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Bonjour

    Tu peux utiliser une référence pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int b = 0;
    int & c = b;

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Par défaut
    Merci Ehonn,

    Cela fonctionne (avec la méthode des pointeurs), si b et c sont de même type... Si ils sont de type differents comment dois-je faire?

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Tu peux essayer quelque chose de ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float a = 0.f;
    double & b = *reinterpret_cast<double*>(&a);
    Sinon, c'est peut être plus propre avec une union (?)

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

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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