reinterpret_cast versteh ich noch nicht ganz



  • Das mit dem reinterpret_cast verstehe ich immer noch nicht ganz, bei folgendem, Beispiel:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int value=122;
        double X=12.36444;
        int *p1=&value;
    
        return 0;
    }
    

    kommt eine Warnung. Weil ich ja den Wert von einem "double" in eine "int" Variable reinhaue. Okay, also habe ich mir gedacht wende ich hier einen "reinterpret_cast" an (weil es handelt sich ja um einen Zeiger), sodass ich die Warnung weg bekomme.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int value=122;
        double X=12.36444;
        int *p1=&value;
        *p1=reinterpret_cast<int*>(X);
    
        return 0;
    }
    

    Aber das geht nicht, das kommt die Fehlermeldung hier:

    Compiling: C:\MinGW\Andi\casts.cpp
    C:\MinGW\Andi\casts.cpp: In function int main()': C:\\MinGW\\Andi\\casts.cpp:13: error: invalid reinterpret_cast from type \double' to type `int*'
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 0 warnings

    Mh was mach ich falsch? Ist das der falsche cast? Der einzige cast der mit einfallen würde, der passen könnte wäre "static_cast", aber den wende ich ja nur an, wenn ich von double nach int konvertiere, bei NICHT Zeiger Variablen.!?
    Mh, kann mir jemand helfen?

    MfG
    Stromberg



  • Achtung Halbwissen

    Du willst, dass ein int-Zeiger auf einen double-Wert zeigt. Das geht nicht...

    MfG



  • Was willst du eigentlich erreichen? Gehen würde z.B.

    int* p = reinterpret_cast<int*>(&X);
    

    , aber ob das das ist, was du willst, weiß ich nicht.



  • Gut, dann ahb ichs falsch verstanden. Jetzt weiß ich wies geht, ich wollte genau das hier erreichen:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int value=992;
        double X=12.36444;
        int *p1=&value;
        *p1=static_cast<int>(X);
        cout << value << endl;
    
        return 0;
    }
    

    Der Variable "value" über den Zeiger p1 den Wert von der double-Variable X übergeben, ohne das mein Compiler eine Warnung ausspuckt!

    MfG
    Stromberg


Anmelden zum Antworten