Ein reinterpret_cast



  • Okay, ich habe folgenden Code zu dem Thema reinterpret_cast gefunden.
    Jedoch habe ich keinen blassen Schimmer, wofür dieser Cast ist !?!!!?!
    Ich habe gelesen, er ist der mächtigste Cast in C++ , aber warum ???
    Hier ist erstmal der Code:

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
        char const* s = "Hallo";
        int i=reinterpret_cast<int>(s);
        cout << "Die Adresse von s ist: "<<i<<'\n';
    
        getch();
    }
    

    okay, kann mir jetzt auch jemand erzählen, was diese Zahl im Programm soll ?
    Ich verstehe rein gar nichts und im Internet hab ich nichts wissenswertes gefunden. Also erbitte ich hier Hilfe und thx im Voraus.

    Liebe Grüße Flo



  • reinterpret_cast weist den Compiler an, ohne weitere Konvertierungen einen Datentyp wie einen anderen zu behandeln. Er ist der mächtigste Casting-Operator, weil man mit ihm die Typprüfung des Compilers umgeht.
    Die Zahl die dein Programm ausgibt, ist die Adresse, an der die Zeichenkette s mit dem Inhalt "Hallo" gespeichert ist.

    Wie lernst du C++? Es wäre klug dir ein Buch zu besorgen, mit dem du dir die wichtigsten Grundlagen selbst beibringen kannst.

    Übrigens kann man auch weniger Ausrufe- und Fragezeichen benutzen, dann steigt die Chance ernstgenommen zu werden.



  • Okay, erstmal vielen Dank, habe es verstanden !

    Ich lerbne C++ über ein ausführliches Tutorial im Internet:

    http://tutorial.schornboeck.net/inhalt.htm

    Aber ich weiß nicht mehr so recht, ob der reinterpret_cast zu den Grundlagen gegört. Die Programme, die mit ihm erzeugt werden können, sind weitaus komplizierter, als die, die ich vor einigen Monaten (so 5 oder 6) schrieb.

    Das mit den Ausrufezeichen; Okay das könnte ich wirklich ändern ! ^^

    Trotzdem liebe Liebe Grüße und Vielen Dank fürs Beantworten !



  • Bitte gib dir mehr Mühe, eine Antwort selbst zu finden.
    Das hier war der erste Google-hit und scheint gute Erklärungen zu enthalten:
    http://www.cplusplus.com/doc/tutorial/typecasting/



  • Ja, aber davon habe ich genauso wenig verstanden, wie in meinem Tutorial !



  • Einen char-Pointer in einen int zu casten ergibt 0 Sinn.



  • Janjan schrieb:

    Einen char-Pointer in einen int zu casten ergibt 0 Sinn.

    Nicht unbedingt. In der VCL haben Komponenten z.B. ein int-Attribut "Tag", mit dem man einfach zusätzliche Informationen (meinetwegen auch ein char*) mit einem Objekt verknüpfen kann, ohne gleich einen Nachfahren zu erzeugen.



  • Wenn schon, dann bitte in einen entsprechenden Datentyp konvertieren, keinen mit Vorzeichen. Also ein unsigned 4byte/8byte Zahlenwert, je nach Plattform (x86/x64), schließlich geht es hier um eine Speicheradresse.

    Wenn man unter Windows programmiert, einfach DWORD_PTR nutzen, ist portabel.



  • Athar schrieb:

    Janjan schrieb:

    Einen char-Pointer in einen int zu casten ergibt 0 Sinn.

    Nicht unbedingt. In der VCL haben Komponenten z.B. ein int-Attribut "Tag", mit dem man einfach zusätzliche Informationen (meinetwegen auch ein char*) mit einem Objekt verknüpfen kann, ohne gleich einen Nachfahren zu erzeugen.

    Und wie soll das da mehr Sinn machen? Wie bereits von Icematix erwähnt, in einen int kann man nicht sicher eine Adresse speichern.


Anmelden zum Antworten