Zeiger umwandeln



  • Hallo zusammen,

    ich hoffe das ich meine Frage verständlich rüber bekomme...

    unsigned char Test1=10;
    
    double *pWert = &Test;  // <--- wie ist das richtig?? oder geht das nicht?
    
    cout << *pWert;
    


  • Was soll denn dabei herauskommen?



  • im bestem Fall 10 🙂



  • unsigned char foo = 10;
    double bar = foo;
    

    Fertig.



  • @Fragemann123 Fließkommazahlen sind völlig anders aufgebaut als integer. Selbst wenn du statt char uint64_t genommen hättest und sizeof(Test1) == sizeof(*pWert), würde da nichts sinnvolles raus kommen.



  • Fragemann123 schrieb:

    im bestem Fall 10 🙂

    Tue uns allen einen großen Gefallen und beschäftige dich erstmal mit einem guten Grundlagenbuch.


  • Mod

    Fragemann123 schrieb:

    im bestem Fall 10 🙂

    Nein. Denn wie dir dein Compiler mitteilen wird, brauchst du für die nötige Zeigerkonvertierung einen reinterpret_cast. Das heißt, es wird einfach das Bitmuster neu interpretiert und das Bitmuster für unsigned char (10) wird in üblicher Fließkommadarstellung keine 10 ergeben. Weiterhin ist sizeof(double) > sizeof(unsigned char) = 1, daher wird auch noch irgendwelcher Müll dazu kommen, der zufällig in der Nähe von Test1 im Speicher steht.



  • Nathan schrieb:

    unsigned char foo = 10;
    double bar = foo;
    

    Fertig.

    Da hätte ich so grade auch noch hin bekommen 🙄 dadurch geht der Sinn der Aufgabe verloren.

    Das die 3 Zeilen alleine keinen Sinn ergeben ist mir klar. Das beschreibt nur das Grundproblem was ich gerade habe.

    Ich möchte mit einem double Zeiger auf unterschiedliche Datentypen Zeigen und somit an den Wert zu ändern und auszulesen.

    ich hab gedacht das eventuell reinterpret_cast ein Ansatz wäre aber scheint nicht der fall zu sein.



  • Fragemann123 schrieb:

    Ich möchte mit einem double Zeiger auf unterschiedliche Datentypen Zeigen und somit an den Wert zu ändern und auszulesen.

    Wieso solltest du das wollen? Erklär mal deine ganze Aufgabenstellung.

    Fragemann123 schrieb:

    ich hab gedacht das eventuell reinterpret_cast ein Ansatz wäre aber scheint nicht der fall zu sein.

    Hast du richtig erkannt.



  • Wenn es nicht geht, dann geht es nicht, dann muss ich mir was anderes überlegen. Hätte mir nur ein paar Sachen vereinfacht.

    Zum Speichern und auslesen von Daten hätte ich unabhängig von Datentyp nur eine Funktion schreiben müssen.



  • Schon mal etwas von Templates gehört?

    template <typename T>
    void print(const T &val) // ja, keine Rvalue-Referenz; ja, keine Variadics; gehe nicht von C++11 Support aus
    {
        std::cout << val;
    }
    

Anmelden zum Antworten