reinterpret_cast
-
Ich will die Adresse von einem Pointer in einen int speichern. Das geht doch mit reinterpret_cast, oder? Wie verwende ich den?
-
-
Danke!
Wenn ich das nicht falsch verstanden habe:double* pointer = malloc(sizeof(double)); int adresse = reinterpret_cast<int> pointer;
-
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.