reinterpret_cast



  • in c++ bitte new/delete verwenden



  • IMHO so:

    double* pointer = new double;
    int adresse = reinterpret_cast<int>(pointer);
    

    wie immer gibts keine garantie, da eine Pointer auch vom speicherbedarf in ein int passt.



  • die Methode ist aber nicht sehr gut. Was willst du denn machen? Wenn du die Adresse ausgeben willst, dann benutze lieber folgendes

    #include <cstdio>
    #include <iostream>
    
    int main(void) {
      int a;
      int *ptr=&a;
      std::cout << "Adresse (C++ Stream): " << reinterpret_cast<void*>(ptr) 
            << std::endl;
      std::cout.sync_with_stdio();
      std::printf("Adresse (C Stream): %p",ptr);
    }
    


  • static_cast<void*>() bitte



  • kingruedi, willst du mich ver*****en?

    Ich will die Adresse von einem Pointer in einen int speichern

    Und was machst du? schlägst einen Cast nach void* vor.

    - Wie backe ich ein Brot?
    -> Ja, wenn du den Refen wechseln willst, musst du erstmal den Wagen hochbocken, ...



  • Original erstellt von kingruedi:
    **```cpp
    int *ptr=&a;
    [...]
    std::printf("Adresse (C Stream): %p",ptr);

    '%p' will einen 'void*' als Argument, keinen 'int*'. Wenn die Zeiger zB unterschiedlich groß sind, geht das ordentlich schief. 'sync_with_stdio' ist übrigens, laut Norm, von Anfang an aktiviert, der Aufruf damit redundant.



  • @Helium
    😕
    hast du gelesen was ich geschrieben habe? (wenn nicht, dann tu das nochmal und dann denk mal nach, warum ich nach void* caste und was mein Code für einen Kontext hat 🙄 )

    @Daniel E.
    oh, wusste ich gar nicht (hab sync_with_stdio eh falsch benutzt ;))

    der neue Code:

    #include <cstdio>
    #include <iostream>
    
    int main(void) {
      int a;
      int *ptr=&a;
      std::cout << "Adresse (C++ Stream): " << ptr << std::endl;
      std::printf("Adresse (C Stream): %p",static_cast<void*>(ptr));
    }
    

    hmm, so viel ärger mit so wenig Code 😉

    [ Dieser Beitrag wurde am 22.05.2003 um 19:31 Uhr von kingruedi editiert. ]



  • der Cast nach void* ist bei cout übrigens unnötig 😉



  • also dann amcht er doch einfach :
    TYP pointer* = new TYP;
    int Addess = &pointer;

    oder?

    MFG

    LordHoto



  • TYP pointer* = new TYP;
    int Addess = &pointer;
    

    Ne, das geht nicht.

    &pointer ist die Adresse von pointer, müsste also einem TYP** zuewiesen werden. Zu Ausgabe der Adresse siehe kingruedis zweites Post, zum Speichern in einem Int Siehe mein Post.


Anmelden zum Antworten